DevExpress 折线图和柱状图的绘制与数据绑定
DevExpress 组件是一个非常丰富和强大的组件,适合各种可视化图形的绘制与展示,在数据分析展示中是个很有帮助的,网上也有很多关于这方面的文章,关于折线图或柱状图的画法,以下是自己在工作中接触到的和自己整理的,直接上代码。
/// <summary>
///折线图
/// </summary>
/// <param name="table">数据源</param>
public void DrawChart(DataTable table)
{
this.panel5.Controls.Clear();
// 线图
ChartControl charLine = new ChartControl();
// 总投入
Series series1 = new Series("车组修时", ViewType.Line);
series1.DataSource = table;
charLine.Series.Add(series1);
SetSeries(series1, "TRAINSETNAME", new string[] { "DAYS" });
// 检修车间
Series series2 = new Series("检修车间", ViewType.Line);
series2.DataSource = table;
charLine.Series.Add(series2);
SetSeries(series2, "TRAINSETNAME", new string[] { "I_DAYJX" });
// 转向架车间
Series series3 = new Series("转向架车间", ViewType.Line);
series3.DataSource = table;
charLine.Series.Add(series3);
SetSeries(series3, "TRAINSETNAME", new string[] { "I_DAYZXJ" });
// 设置 chartControl 属性
SetChartControl(charLine, "检修量统计分析\n\n", " 修时(天): ", "平均修时:" + avgRepairDay + " 天", avgRepairDay);
// 添加 charControl
this.panel5.Controls.Add(charLine);
}
/// <summary>
/// 设置Series 的属性
/// </summary>
/// <param name="ser"></param>
/// <param name="argumentDataMember"></param>
/// <param name="valueDataMember"></param>
private void SetSeries(Series series, string argumentDataMember, string[] valueDataMember)
{
// X 轴类型
series.ArgumentScaleType = ScaleType.Qualitative;
//显示的信息和数据
series.PointOptions.PointView = PointView.Values;
// X轴显示字段
series.ArgumentDataMember = argumentDataMember;
series.ValueScaleType = ScaleType.Numerical;
// Y轴取值字段
series.ValueDataMembers.AddRange(valueDataMember);
// 隐藏线条上的显示内容,线条上的数值
series.Label.Visible = false;
// series View 属性
LineSeriesView lineView = (LineSeriesView)series.View;
// 线条上点的标识形状
lineView.LineMarkerOptions.Kind = MarkerKind.Circle;
// 线条类型,实线,虚线
lineView.LineStyle.DashStyle = DashStyle.Solid;
// 鼠标悬浮提示
lineView.LineMarkerOptions.Visible = true;
// 改小圆点到最小值,就不画了
lineView.LineMarkerOptions.Size = ;
// 线条上的标识形状是否需要
lineView.LineMarkerOptions.Visible = true;
}
/// <summary>
/// 设置 chartControl 属性
/// </summary>
/// <param name="chartControl"></param>
private void SetChartControl(ChartControl chartControl, string title, string valueName, string constantLineTitle, double constantLineValue)
{
//Y轴坐标标题
chartControl.Dock = DockStyle.Fill;
// 标题
chartControl.Titles.Clear();
ChartTitle chartTitle = new ChartTitle();
chartTitle.Text = title;
chartTitle.TextColor = Color.Black;
chartTitle.Font = new Font("宋体", );
chartTitle.Dock = ChartTitleDockStyle.Right;
chartTitle.Alignment = StringAlignment.Center;
chartControl.Titles.Add(chartTitle);
chartControl.Legend.Visible = true;
// 鼠标移动悬浮窗口提示信息
ToolTipController toolTip = new ToolTipController();
chartControl.MouseMove += new MouseEventHandler((obj, arg) =>
{
ChartHitInfo hitInfo = chartControl.CalcHitInfo(arg.Location);
StringBuilder builder = new StringBuilder();
if (hitInfo.InSeriesLabel || hitInfo.InSeries || hitInfo.InTrendLine || hitInfo.InConstantLine)
{
if ((Series)hitInfo.Series != null)
{
builder.AppendLine(" 车间: " + ((Series)hitInfo.Series).Name);
}
}
if (hitInfo.SeriesPoint != null)
{
builder.AppendLine(" 车组: " + hitInfo.SeriesPoint.Argument);
if (!hitInfo.SeriesPoint.IsEmpty && hitInfo.SeriesPoint.Values != null && hitInfo.SeriesPoint.Values.Length > )
builder.AppendLine(valueName + hitInfo.SeriesPoint.Values[]);
}
if (builder.Length > )
toolTip.ShowHint(title + builder.ToString(), chartControl.PointToScreen(arg.Location));
else
toolTip.HideHint();
}); // 隐藏提示信息
chartControl.MouseLeave += new EventHandler((obj, arg) =>
{
toolTip.HideHint();
}); //X轴刻度间隔设置
XYDiagram diagram = (XYDiagram)chartControl.Diagram;
if (diagram == null)
return;
// x轴间距
diagram.AxisX.GridSpacingAuto = false;
diagram.AxisX.GridSpacing = ;
// X轴滚动条
diagram.AxisX.Range.Auto = false;
diagram.AxisX.Range.MinValueInternal = ;
diagram.AxisX.Range.MaxValueInternal = ;
// Y轴滚动条
diagram.EnableScrolling = true;
//X轴刻度是否显示
diagram.AxisX.Tickmarks.Visible = true;
// X轴文字方向
diagram.AxisX.Label.Angle = ;
diagram.AxisX.Tickmarks.MinorVisible = true;
diagram.AxisX.MinorCount = ;
// 从 x 轴原点开始显示
diagram.AxisX.Range.ScrollingRange.SideMarginsEnabled = true;
diagram.AxisX.Range.ScrollingRange.MinValue = ;
// 基线信息
ConstantLine cl = new ConstantLine(constantLineTitle, constantLineValue);
cl.Color = Color.Red;
cl.Title.TextColor = Color.Red;
cl.Title.Font = new Font("宋体", 12F);
diagram.AxisY.ConstantLines.Add(cl);
}
2.柱状图的绘制与折线图大致一样,不同的地方在于,柱状图的每一个柱子都对应一个 series 对象,有多少个柱子就要创建多少个 series 对象
/// <summary>
/// 创建山积图
/// </summary>
/// <param name="table"></param>
private void CreateChartControl(DataTable table)
{
//动态生成一个柱状图表,调用下面的静态方法
chart = new ChartControl();
//Y轴坐标标题
chart.Dock = DockStyle.Fill;
chart.Legend.Visible = false;
// 标题
ChartTitle chartTitle = new ChartTitle();
chartTitle.Text = "生产线工作量平衡分析";
chartTitle.TextColor = Color.Black;
chartTitle.Font = new Font("宋体", );
chartTitle.Dock = ChartTitleDockStyle.Right;
chartTitle.Alignment = StringAlignment.Center;
chart.Titles.Clear();
chart.Titles.Add(chartTitle);
chart.RuntimeSelection = true;
// 鼠标热点
chart.ObjectHotTracked += new HotTrackEventHandler(charBar_ObjectHotTracked);
// 悬浮提示窗口
chart.MouseMove += new MouseEventHandler(charBar_MouseMove);
// 隐藏悬浮提示窗口
chart.MouseLeave += new EventHandler(charBar_MouseLeave);
for (int i = ; i < table.Rows.Count; i++)
{
string name = table.Rows[i]["S_WORKORDERNAME"].ToString();
// 柱状图里的一个柱
Series series1 = new Series(name, ViewType.Bar);
var p1 = new SeriesPoint(strTemp, avg);
p1.Tag = name;
series1.Points.Add(p1);
series1.ArgumentScaleType = ScaleType.Qualitative;
//柱状图显示的信息和数据
series1.PointOptions.PointView = PointView.SeriesName;
BarSeriesView bsv = (BarSeriesView)series1.View;
bsv.BarWidth = ;
bsv.Transparency = ;
series1.Label.Visible = false;
chart.Series.Add(series1);
} //X轴刻度间隔设置
XYDiagram diagram = (XYDiagram)chart.Diagram;
if (diagram == null)
return;
diagram.AxisX.MinorCount = ;
// x轴间距
diagram.AxisX.GridSpacingAuto = false;
diagram.AxisX.GridSpacing = ;
// X轴滚动条
diagram.AxisX.Range.Auto = false;
// if(diagram.AxisX.Range.MaxValueInternal > diagram.AxisX.Range.MinValueInternal)
diagram.AxisX.Range.MinValueInternal = ;
diagram.AxisX.Range.MaxValueInternal = ;
diagram.EnableScrolling = true;
//X轴刻度是否显示
diagram.AxisX.Tickmarks.Visible = false;
// X轴文字方向
diagram.AxisX.Label.Angle = ;
diagram.AxisX.Tickmarks.MinorVisible = true;
diagram.AxisX.MinorCount = ;
// 从 x 轴原点开始显示
diagram.AxisX.Range.ScrollingRange.SideMarginsEnabled = true;
diagram.AxisX.Range.ScrollingRange.MinValue = ;
diagram.Margins.Left = ;
// Y 轴刻度
diagram.AxisY.Range.Auto = true;
//diagram.AxisY.Range.MaxValue = 80;
// 创建车型单选
CreateRadioButtonForTrain(diagram);
}
/// <summary>
/// 鼠标移动,窗口悬浮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void charBar_MouseMove(object sender, MouseEventArgs e)
{
ChartHitInfo hitInfo = charBar.CalcHitInfo(e.Location);
StringBuilder builder = new StringBuilder();
if (hitInfo.SeriesPoint != null)
{
builder.AppendLine(" 工序名称: " + hitInfo.SeriesPoint.Tag.ToString());
if (!hitInfo.SeriesPoint.IsEmpty)
builder.AppendLine(" 修时(小时): " + hitInfo.SeriesPoint.Values[]);
}
if (builder.Length > )
charBartoolTip.ShowHint("生产线工作量平衡分析 \n\n" + builder.ToString(), charBar.PointToScreen(e.Location));
else
charBartoolTip.HideHint();
} /// <summary>
/// 鼠标离开
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void charBar_MouseLeave(object sender, EventArgs e)
{
charBartoolTip.HideHint();
}
/// <summary>
/// 鼠标滑过时,高亮显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void charBar_ObjectHotTracked(object sender, HotTrackEventArgs e)
{
if (e.Object is Series)
e.Cancel = false;
else
e.Cancel = true;
}
3. 相关资料
Devexpress 官网地址:https://www.devexpress.com/
Devexpress 官网文档:https://www.devexpress.com/support/documentation/
DevExpress 折线图和柱状图的绘制与数据绑定的更多相关文章
- MATLAB之折线图、柱状图、饼图以及常用绘图技巧
MATLAB之折线图.柱状图.饼图以及常用绘图技巧 一.折线图 参考代码: %图1:各模式直接成本预测 %table0-table1为1*9的数组,记录关键数据 table0 = data_modol ...
- Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例
目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...
- excel在一个图表内,显示折线图和柱状图
折线图和柱状图,在同一个图表中拆分显示 一个图,设置主坐标轴 另外一个图,设置次坐标轴 拆分,通过调整纵坐标的最小值和最大值来实现 关于图表的标题,选中图表,选择布局,然后图表 ...
- echarts、higncharts折线图或柱状图显示数据为0的点
echarts.higncharts折线图或柱状图只需要后端传到前端一段json数据,接送数据的x轴与y周有对应数据,折线图或柱状图就会渲染出这数据. 比如,x轴表示美每天日期,y轴表示数量.他们的数 ...
- DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)
1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点 ...
- OpenGL(十七) 绘制折线图、柱状图、饼图
一.绘制折线图 glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写 ...
- VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...
- SpringMVC框架下使用jfreechart绘制折线图,柱状图,饼状图
java代码 @Controller public class CityAction { @Autowired private CityBiz cityBiz; //柱状图 @RequestMappi ...
随机推荐
- 小程序之hover-class
hover-class 属性主要是用来来指定元素的点击态效果.但是在在使用中要注意,大部分组件是不支持该属性的. 目前支持 hover-class 属性的组件有三个:view.button.navig ...
- 项目工程中的WebRoot与WebContent有什么区别?
[1] 在MyEclipse中创建web项目后,web程序的根目录文件夹是WebRoot,而创建dynam web project时候,web程序的根 目录文件夹是WebContent,他们之间没有本 ...
- AJAX 应用
ajax简介 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.Ajax不是一种新的编程语言, ...
- centos7设置定时任务
第一种方式修改/etc/crontab文件,这种方式是系统的周期任务,只能root用户才可以执行 SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMA ...
- Java I/O输入输出流
IO流的复习总结 ------注:蓝色背景段落是例子:红色背景的字段IO流的功能类. 编码问题 String s = "威力锅ABC"; //utf-8编码中文占用三个字节,英文 ...
- Python安装及IDE激活
简介: Windows10下安装激活Pycharm,并同时安装Python 3.x.2.x,便于在Pycharm开发环境中使用不同版本的解释器进行对比学习. 目录: 一.Python 3.x安装 二. ...
- linux下目录简介——/SElinux
一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELinux 主要由美国 ...
- 使用multidex解决64K方法引用的限制
1.什么是64K方法引用的限制 65536(64K)是单个dex(Dalvik Executable)字节码文件的可引用的方法数的最大数,包括Android framework.应用的library和 ...
- PRBS
PRBS是Pseudo Random Binary Sequence的缩写,即“伪随机二进制序列”的意思.PRBS码具有“随机”特性,是因为在PRBS码流中,二进制数“0”和“1”是随机出现的,但是它 ...
- onclick事件传递对象参数
<a href="#"onclick="editName(JSON.stringify(data).replace(/"/g, '"'))&qu ...