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 ...
随机推荐
- css常用选择器选择器
tap选择器 ulclass选择器 .id选择器 #后代选择器 a b子代选择器 a>b兄弟选择器 a + b 以a为参考给b加样式属性选择器 input [type="text&qu ...
- width属性
宽度属性 width:长度值|百分比|auto 最大宽度:max-width 最小宽度:min-width 说明:设置块级元素和替换元素的内容宽度.
- java反射2
package com.wen; import java.lang.reflect.Field;import java.lang.reflect.Method; public class Test2 ...
- Spring(转载一)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 离线安装Eclipse插件-Vrapper
首先下载Vrapper的资源文件:https://sourceforge.net/projects/vrapper/ 下载完成后解压,将features和plugins文件夹内的文件复制到eclips ...
- tornado--输入和输出
tornado--输入和输出 tornado的self.write只接受byte,Unicode,dict三种格式的对象. self.write会存在一个缓冲区,当不强制断开缓冲的时候,它会把当前函数 ...
- Linux 6.8 源码安装MySQL8.0
搭建环境说明: 系统版本:Red Hat Enterprise Linux Server release 6.8 (Santiago) 内核版本:Linux 2.6.32-642.el6.x86_64 ...
- C语言练习题库----数组
有如下语句 int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p = a;则数值为9的表达式是______ *p+9 b) ...
- linux 解压缩总结
总结1.*.tar 用 tar –xvf 解压2.*.gz 用 gzip -d或者gunzip 解压3.*.tar.gz和*.tgz 用 tar –xzf 解压4.*.bz2 用 bzip2 -d或者 ...
- is_numeric — 检测变量是否为数字或数字字符串
is_numeric — 检测变量是否为数字或数字字符串 bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE ,否则返回 FALSE . 参 ...