.Net下各种第三方的Chart图组件很多,笔者在三维管廊监测中使用的Devexpress插件实现的柱状图,效果如下图:
具体的方法:
1、在xaml中引入Devexpress插件
xml命名空间引入
xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts"
chart插件引入
<dxc:ChartControl Name="alarmChart" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Width="980" Background="#001f55" Foreground="#03ffea" Margin="20,0,20,19">
</dxc:ChartControl>
2、柱状图所需的数据
数据从数据库中取出,包括报警类型和报警数量
DataTable dt;
dt = WPFHelp.Instance.DbInit.queryTablesDGSYS("select 报警类型 from STC_报警类型表");
3、创建chart各属性,并赋值
Brush brush;
BrushConverter brushConverter = new BrushConverter();
brush = (Brush)brushConverter.ConvertFromString("#03ffea");//"#17acae");
Diagram diagram = null;
diagram = new XYDiagram2D();
AxisY2D asisy = new AxisY2D();
AxisTitle asisTitle = new AxisTitle();
asisTitle.Content = "统计值";
asisTitle.Foreground = brush;
asisy.Title = asisTitle;
asisy.Brush = brush;
//Y轴刻度尺颜色
asisy.ActualLabel.Foreground= brush;
((XYDiagram2D)diagram).AxisY = asisy;
_title = "";// "报警统计";
AxisX2D asisx = new AxisX2D();
asisx.Brush = brush;
((XYDiagram2D)diagram).AxisX = asisx;
asisx.ActualLabel.Foreground = brush;
this.LoadChartData(_title, diagram, "直方图", dt);
4、LoadChartData 函数定义
private void LoadChartData(string title, Diagram diagram, string seriesType, DataTable dtable)
{
try
{
if (dtable == null || dtable.Rows.Count == 0)
{
return;
}
//透明
this.alarmChart.Legend = null;
if (!(diagram is SimpleDiagram2D))
{
Legend legend = new Legend();
legend.ReverseItems = true;
this.alarmChart.Legend = legend;
}
this.alarmChart.Diagram = diagram;
Title t = new Title();
t.Content = title;
t.FontSize = 15;
Brush brush;
BrushConverter brushConverter = new BrushConverter();
brush = (Brush)brushConverter.ConvertFromString("#FF0000");//"#17acae");
t.Foreground = brush;
t.HorizontalAlignment = HorizontalAlignment.Center;
alarmChart.Titles.Clear();
alarmChart.Titles.Add(t);
for (int i = 0; i < dtable.Rows.Count; i++)
{
Series series = new BarSideBySideSeries2D();//= CreateSeries(seriesType);
series.DisplayName = dtable.Rows[i][0].ToString();
series.AnimationAutoStartMode = AnimationAutoStartMode.SetStartState;
//series.FontStyle = new FontStyle();
for (int j = 1; j < dtable.Columns.Count; j++)
{
SeriesPoint seriesPoint = new SeriesPoint();
seriesPoint.Argument = dtable.Rows[i][0].ToString();// dtable.Columns[0].ColumnName.ToString();
seriesPoint.Value = double.Parse(dtable.Rows[i][j].ToString());
series.Points.Add(seriesPoint);
}
alarmChart.Diagram.Series.Add(series);
}
Title t1 = new Title();
t1.Content = "数据项".PadRight(50);
t1.FontSize = 14;
t1.Foreground = brush;
t1.HorizontalAlignment = HorizontalAlignment.Right;
t1.Dock = Dock.Bottom;
alarmChart.Titles.Add(t1);
}
catch (Exception ex)
{
}
}