Dev之ChartControl控件(二)— 绘制多重坐标图形
有时针对一个ChartControl控件可能要设置多个Y轴,进行显示:
以下举个例子:如在一个Chart中显示多个指标项如图:
首先,读取数据,并对左边的Y轴最大和最小值进行设定
IndexSeriesControler indexControl = new IndexSeriesControler();
IEnumerable<IndexModel> ieModel= indexControl.GetDate(dateB,dateE,indexName);//读取的数据集
decimal max= ieModel.Max(x => x.IndexValue);
decimal min = ieModel.Min(x => x.IndexValue);
其次,生成Series,并添加到charControl控件;
Series series = new Series(indexName, ViewType.Spline);
if (num != )
{
lstSeries.Add(series);
} foreach (IndexModel model in ieModel)
{
series.Points.Add(new SeriesPoint(model.PublishDate, new double[] { (double)model.IndexValue }));
} series.View = splineSeriesView1; this.chartControl.Series.Add(series); this.chartControl.Legend.Visible = false;
再次,创建图标的第二坐标;
效果如图:
public void GetAxisY()
{
for (int i = ; i < lstSeries.Count; i++)
{
lstSeries[i].View.Color = lstColor[i];
CreateAxisY(lstSeries[i]);
}
} /// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象</param>
/// <returns></returns>
private SecondaryAxisY CreateAxisY(Series series)
{
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visible = true; //显示标题
myAxis.Title.Font = new Font("宋体", 9.0f); Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致 myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color; return myAxis;
}
完整代码如下:
public partial class ChartControlExtension : UserControl
{
public ChartControlExtension()
{
InitializeComponent();
ChartTitle chartTitle=new ChartTitle();
chartTitle.Text="新干线";
chartTitle.TextColor=System.Drawing.Color.Black;
this.chartControl.Titles.Add(chartTitle);
lstColor.Add(Color.Red);
lstColor.Add(Color.Black);
lstColor.Add(Color.Blue);
lstColor.Add(Color.Brown);
}
public bool IsRange { set; get; }
public List<Series> lstSeries = new List<Series>();
public List<Color> lstColor = new List<Color>();
int num = ;
public void GetDate(DateTime dateB, DateTime dateE, string indexName)
{
IndexSeriesControler indexControl = new IndexSeriesControler();
IEnumerable<IndexModel> ieModel= indexControl.GetDate(dateB,dateE,indexName);
decimal max= ieModel.Max(x => x.IndexValue);
decimal min = ieModel.Min(x => x.IndexValue);
// this.chartControl.Series.Clear(); Series series = new Series(indexName, ViewType.Spline);
if (num != )
{
lstSeries.Add(series);
} foreach (IndexModel model in ieModel)
{
series.Points.Add(new SeriesPoint(model.PublishDate, new double[] { (double)model.IndexValue }));
} this.chartControl.Series.Add(series);
this.chartControl.Legend.Visible = false;
//this.chartControl.cut
if (num == )
{
XYDiagram diag = (XYDiagram)this.chartControl.Diagram;
diag.AxisY.VisualRange.MaxValue = max;
diag.AxisY.VisualRange.MinValue = min-;
} //this.IsRange = true;
num++; } public void GetAxisY()
{
for (int i = ; i < lstSeries.Count; i++)
{
lstSeries[i].View.Color = lstColor[i];
CreateAxisY(lstSeries[i]);
}
} /// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象</param>
/// <returns></returns>
private SecondaryAxisY CreateAxisY(Series series)
{
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visible = true; //显示标题
myAxis.Title.Font = new Font("宋体", 9.0f); Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致 myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color; return myAxis;
}
}
调用方法:
private void tolBtnSearch_Click(object sender, EventArgs e)
{
chartControlExtension1.GetDate(datPBegin.Value,datPEnd.Value,"铁矿石指数");
chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "钢材指数");
chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "铁矿指数");
chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "焦炭指数");
chartControlExtension1.GetAxisY(); }
其打印方法可用:
this.chartControl.ShowPrintPreview(DevExpress.XtraCharts.Printing.PrintSizeMode.Zoom);
Dev之ChartControl控件(二)— 绘制多重坐标图形的更多相关文章
- DevExpress控件使用之多重坐标图形的绘制 z
有时候,基于对一些年份.月份的统计,需要集成多个数值指标进行分析,因此就需要把多种数据放到一个图形里面展现,也成为多重坐标轴,多重坐标轴可以是多个X轴,也可以是Y轴,它们的处理方式类似.本文通过一个例 ...
- Dev之ChartControl控件(一)
ChartControl控件主要包括Chart Title,Legend,Annotations,Diagram,Series五部分:如图: 1. 用RangeControl控件控制ChartCon ...
- DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- WinForm DevExpress使用之ChartControl控件绘制图表一——基础
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- QRowTable表格控件(二)-红涨绿跌
目录 一.开心一刻 二.概述 三.效果展示 四.任务需求 五.指定列排序 六.排序 七.列对其方式 八.相关文章 原文链接:QRowTable表格控件(二)-红涨绿跌 一.开心一刻 一天,五娃和六娃去 ...
- 玩转控件:对Dev中GridControl控件的封装和扩展
又是一年清明节至,细雨绵绵犹如泪光,树叶随风摆动.... 转眼间,一年又过去了三分之一,疫情的严峻让不少企业就跟清明时节的树叶一样,摇摇欲坠.裁员的裁员,降薪的降薪,996的996~~说起来都是泪,以 ...
- Windows高DPI系列控件(二) - 柱状图
目录 一.QCP 二.效果展示 三.高DPI适配 1.自定义柱状图 2.新的柱状图 3.测试代码 四.相关文章 原文链接:Windows高DPI系列控件(二) - 柱状图 一.QCP QCP全称QCu ...
- WPF 截图控件之绘制箭头(五)「仿微信」
前言 接着上周写的截图控件继续更新 绘制箭头. 1.WPF实现截屏「仿微信」 2.WPF 实现截屏控件之移动(二)「仿微信」 3.WPF 截图控件之伸缩(三) 「仿微信」 4.WPF 截图控件之绘制方 ...
- 在Image控件中绘制文字
//Canvas 在Image控件中绘制文字 procedure TForm1.Button1Click(Sender: TObject);begin image1.Canvas.Font.Size ...
随机推荐
- 【Office Web Apps】在 SharePoint 中使用 Office Web Apps
在 SharePoint 中使用 Office Web Apps 在安装并配置了 Microsoft Office Web Apps 的 SharePoint 网站上,通过 Office Web Ap ...
- java.util.Iterator
public interface Iterator<E>: 对 collection 进行迭代的迭代器. 方法摘要: boolean hasNext() 如果仍有元素可以迭代,则返回 tr ...
- kvstore之mongodb为存储介质
配置config(连接mongo) mongo define('KVSTORE_STORAGE', 'base_kvstore_mongodb'); define('MONGODB_SERVER_CO ...
- linux命令英文缩写的含义(方便记忆)
命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...
- 浅析js模板引擎
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- Valgrind: memcheck of memleak/mem-uninitialization; massif usage
first install valgrind, its newest ver is 3.11, and stops updating since 2015/12. in centos, yum ins ...
- jquery 1.9版本后不在支持browser 方法的解决方案
今天对jquery 进行升级,导致项目出错,原来在1.9版本之后 jquery 不支持browser 方法了. 官方建议的又不好用,所以我所jquery 原来的代码摘除来,又扩展回去. //解决jq ...
- 还原openstack配置文件的方法
cp -a /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bakcp -a /etc/neutron/plugins/ml2/ml2_conf ...
- 怎么破解Wifi密码
破解无络网络Wifi密码,让手机上Wifi不再受限. 方法/步骤 1 上网搜索并下载“Wfi万能钥匙”APK程序,然后将其安装到手机内存中.可以借助手机类管理软件将APK应用安装到手机中. 步骤阅读 ...
- 在Activity之间传递数据—获取Activity返回的数据
在获取返回值时要注意的是打开Activity的方式,用方法:startActivityForResult 接收时,重写方法:onActivityResult 在子Activity中,写数据用方法:se ...