设为首页 收藏本站

开发者论坛

  找回密码
  注册 (请使用非IE浏览器)
快捷导航
  • 开发者技术论坛BBS
  • 赞助者积分领取
  • 优秀资源分享区
  • DevExpress中文文档Dxperience·WinForm中文开发文档
搜索
热搜: DevExpress Dxperience devexpress dxperience 12.2汉化 12.1汉化 12.2.6 源码 chm redgate sp2 xaf 12.2.10 unlock dev 发布 13.1.4 XAF 购买主题 addin help
开发者论坛» 开发者技术论坛 DevExpress综合专区 DXperience【WINFORM】 【DevExpress使用教程】使用ChartControl绘制多重坐标图 ...
返回列表 发新帖
查看: 4019|回复: 0

【DevExpress使用教程】使用ChartControl绘制多重坐标图形

[复制链接]
AABBbaby

0

精华

8

贡献

1768

赞扬

特约版主

帖子
583
软币
4524
在线时间
275 小时
注册时间
2019-2-21
  • 发消息
发表于 2019-3-4 10:33:28 | 显示全部楼层 | 阅读模式
有时基于对一些年份、月份的统计,需要集成多个数值指标进行分析,因此就需要把多种数据放到一个图形里面展现,也成为多重坐标轴,多重坐标轴可以是多个X轴,也可以是Y轴,它们的处理方式类似。

首先我们先来看一个图形例子,我们可以从里面图形的右边看到有多个Y轴,一个Y轴代表一个指标分析,X轴为月份。


上图是采用了DevExpress的ChartControl图表控件来实现的,这个控件提供了SecondaryAxisY对象来处理多重坐标的问题。

1、准备数据并绑定

首先,拖动ChartControl控件到Form界面上,然后设计好布局。

下面为了测试准备了几项数据,绑定在下面列表GridControl对象里面,然后把数据绑定到图表对象里面,如下代码。具体处理的时候,我们从数据库获取对应指标的数据即可实现动态绑定。

[C#] 纯文本查看 复制代码
/// <summary>
/// 准备数据内容
/// </summary>
/// <returns></returns>
private DataTable CreateData()
{
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("类型"));
    dt.Columns.Add(new DataColumn("2005-1月", typeof(decimal)));
    dt.Columns.Add(new DataColumn("2005-2月", typeof(decimal)));
    dt.Columns.Add(new DataColumn("2005-3月", typeof(decimal)));
    dt.Columns.Add(new DataColumn("2005-4月", typeof(decimal)));
    dt.Columns.Add(new DataColumn("2005-5月", typeof(decimal)));
    dt.Columns.Add(new DataColumn("2005-6月", typeof(decimal)));
 
    dt.Rows.Add(new object[] { "员工人数", 437, 437, 414, 397, 387, 378 });
    dt.Rows.Add(new object[] { "人均月薪", 3964, 3961, 3979, 3974, 3967, 3972 });
    dt.Rows.Add(new object[] { "成本TEU", 3104, 1339, 3595.8, 3154.5, 2499.8, 3026 });
    dt.Rows.Add(new object[] { "人均生产率", 7.1, 3.06, 8.69, 7.95, 6.46, 8.01 });
    dt.Rows.Add(new object[] { "占2005年3月人数比例", 1.06, 1.06, 1, 0.96, 0.93, 0.91 });
 
    return dt;
}
 
private void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = CreateData();
    this.gridControl1.DataSource = dt;
 
    CreateChart(dt);
}

2、创建图表图形
[C#] 纯文本查看 复制代码
private void CreateChart(DataTable dt)
{
    #region Series
    //创建几个图形的对象
    Series series1 = CreateSeries("员工人数", ViewType.Line, dt, 0);
    Series series2 = CreateSeries("人均月薪", ViewType.Line, dt, 1);
    Series series3 = CreateSeries("成本TEU", ViewType.Line, dt, 2);
    Series series4 = CreateSeries("人均生产率", ViewType.Line, dt, 3);
    Series series5 = CreateSeries("占2005年3月人数比例", ViewType.Line, dt, 4);
    #endregion
 
    List<Series> list = new List<Series>() { series1, series2, series3, series4, series5 };
    chartControl1.Series.AddRange(list.ToArray());
    chartControl1.Legend.Visible = false;
    chartControl1.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
 
    for (int i = 0; i < list.Count; i++)
    {
        list[i].View.Color = colorList[i];
 
        CreateAxisY(list[i]);
    }
}


为了简化代码,并方便处理,上面代码中提取了两个函数进行了独立处理。

CreateSeries用于创建一个典型的图形,如一条曲线。CreateAxisY用来创建一个多重坐标轴。

CreateSeries用于创建一个典型的图形的源码如下所示。值得注意的是series.ArgumentScaleType = ScaleType.Qualitative;这句代码必须设置,否则默认会把“2005年1月”内容转换为日期类型,显示不恰当的内容。

[C#] 纯文本查看 复制代码
/// <summary>
/// 根据数据创建一个图形展现
/// </summary>
/// <param name="caption">图形标题</param>
/// <param name="viewType">图形类型</param>
/// <param name="dt">数据DataTable</param>
/// <param name="rowIndex">图形数据的行序号</param>
/// <returns></returns>
private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int rowIndex)
{
    Series series = new Series(caption, viewType);
    for (int i = 1; i < dt.Columns.Count; i++)
    {
        string argument = dt.Columns[i].ColumnName;//参数名称
        decimal value = (decimal)dt.Rows[rowIndex][i];//参数值
        series.Points.Add(new SeriesPoint(argument, value));
    }
 
    //必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
    //也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
    series.ArgumentScaleType = ScaleType.Qualitative;
    series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
 
    return series;
}

CreateAxisY用来创建一个多重坐标轴的代码如下所示,注意这里多重坐标,使用了和Series一直的View.Color颜色,这样方便区分。



[C#] 纯文本查看 复制代码
/// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象</param>
/// <returns></returns>
private SecondaryAxisY CreateAxisY(Series series)
{
    SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
    ((XYDiagram)chartControl1.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;
}

3、Web界面的展现和代码处理

本来以为在Web上,使用DevExpress控件实现上图的图表很麻烦,没想到它们的对象关系及属性完全一样,复制代码就基本解决问题了,界面代码变化一点点而已( 下载HTML界面代码)。

后台代码,除了绑定数据的代码略有不同外,其他完全一致。

[C#] 纯文本查看 复制代码
public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                //D线产量、薪酬、人员、生成率趋势图
                DataTable dt = CreateData();
 
                //绑定数据源到表格里面
                this.ASPxGridView1.DataSource = dt;
                this.ASPxGridView1.DataBind();
 
                CreateChart(dt);
            }
        }
.............

Web上图表的效果如下所示,鼠标放到图形节点上,还有动态提示,很友好。


4、图表的打印

ChartControl提供了很好的打印功能,使用代码很简单。

[C#] 纯文本查看 复制代码
private void btnPrint_Click(object sender, EventArgs e)
{
    this.chartControl1.ShowPrintPreview(DevExpress.XtraCharts.Printing.PrintSizeMode.Zoom);
}

得到的效果如下所示,基本上能够满足要求了,当然复杂的定制打印需要另外的处理代码了。


打印也可以使用下面的代码,效果差不多,但是定制性比较强一点。

转载自 http://www.cnblogs.com/wuhuacong/archive/2013/05/13/3076142.html

===============================================================

DevExpress v18.2全新发布,更多精彩内容请持续关注DevExpress中文网!




回复

使用道具 举报

返回列表 发新帖

Archiver| 手机版| 小黑屋| 开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-6-25 05:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表

聚圣源公司起名三个字大全集企业起名 周易上海玛吉斯男篮公司起名带泉字的华陀谢姓女孩起名建材建材行业起名中秋节空间留言代码上京是现在的哪个城市孤山寺北贾亭西龙凤胎成语有哪些起名中国起名大师下载照例的近义词商标起名免费锂电池注册商标起名饺子店起姓名大全给钻戒的起名字mail.sohu.com舵爷神界危机4.4隐藏英雄密码春天女宝宝起名健康机构起名ultraedit剑仙名字鞠姓属鼠起名公司起名的注意事项羊宝宝八字起名乳胶漆施工工艺黑色童话算命起名字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化