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 折线图和柱状图的绘制与数据绑定的更多相关文章

  1. MATLAB之折线图、柱状图、饼图以及常用绘图技巧

    MATLAB之折线图.柱状图.饼图以及常用绘图技巧 一.折线图 参考代码: %图1:各模式直接成本预测 %table0-table1为1*9的数组,记录关键数据 table0 = data_modol ...

  2. Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例

    ​  目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...

  3. excel在一个图表内,显示折线图和柱状图

      折线图和柱状图,在同一个图表中拆分显示   一个图,设置主坐标轴 另外一个图,设置次坐标轴     拆分,通过调整纵坐标的最小值和最大值来实现     关于图表的标题,选中图表,选择布局,然后图表 ...

  4. echarts、higncharts折线图或柱状图显示数据为0的点

    echarts.higncharts折线图或柱状图只需要后端传到前端一段json数据,接送数据的x轴与y周有对应数据,折线图或柱状图就会渲染出这数据. 比如,x轴表示美每天日期,y轴表示数量.他们的数 ...

  5. DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)

    最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...

  6. iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

    1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点 ...

  7. OpenGL(十七) 绘制折线图、柱状图、饼图

    一.绘制折线图 glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写 ...

  8. VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)

    1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...

  9. SpringMVC框架下使用jfreechart绘制折线图,柱状图,饼状图

    java代码 @Controller public class CityAction { @Autowired private CityBiz cityBiz; //柱状图 @RequestMappi ...

随机推荐

  1. @NotNull和@NotEmpty和@NotBlank 区别

    1.@NotNull:不能为null,但可以为empty:用在基本类型上. 2.@NotEmpty:不能为null,而且长度必须大于0:用在集合类上面. 3.@NotBlank:只能作用在String ...

  2. centos7使用cronolog分割tomcat8.5的catalina.out日志

    1.安装cronolog wget https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz tar -zxvf cronolog ...

  3. 初探OpenCL之Mac OS上的hello world示例

    了解了深度学习的崛起,引起了目前OpenCL的需求,大致了解一下. 相关内容:http://blog.csdn.net/leonwei/article/details/8880012 本身OpenCL ...

  4. MongoDB4.0 WINDOWS环境下 副本集、分片部署

    部署开始: 创建路径 D:\Program Files\MongoDB\MySet下 config Data log 文件夹 config文件夹下准备配置文件: 分片1的副本集1 storage: d ...

  5. [C]最大公约数和最小公倍数

    /*求最大公约数和最小公倍数 编写程序,在主函数中输入两个正整数 a,b,调用两个函数 fun1() 和 fun2(),分别求 a 和 b 的最大公约数和最小公倍数,在主函数中输出结果. */ #in ...

  6. cdcq的独立博客

    cdcq的独立博客终于又复活啦,以后就用这个了 地址: http://cdcq.coding.me 现在用的是luogu的博客:https://cdcq.blog.luogu.org/

  7. 一个简单的例子了解states

    在大规模的配置管理工作中,我们要编写大量的states.sls文件.top.sls是states系统的入口文件,它负责指定哪些设备调用哪些states.sls文件.statse的默认工作目录是在/sr ...

  8. stolon cloud native postgresql 高可用方案

    stolon方案与patroni 类似,是一个新的pg ha 方案 包含的组件 keeper:它管理一个PostgreSQL实例,汇聚到由领导者sentinel计算的clusterview. sent ...

  9. python 基础之自动类型转换和强制类型转换

    一:自动类型转换 自动类型转换注意针对Number数据类型来说的 当2个不同类型的数据进行运算的时候,默认向更高精度转换 数据类型精度从低到高:bool int float complex #关于bo ...

  10. 18.18 Datasheet Note

    18.18.1 DM9000A datasheet Ethernet Controller with General Processor Interface Ethernet interface pr ...