ComponentOne Chart For WPF是一款包含在ComponentOne Studio for WPF里的图表控件,可以帮助开发人员快速在WPF平台下创建丰富的图表应用程序,直观地显示和分析数据,下面是该控件在使用过程中经常遇到的一些使用技巧,具体如下:
提示技巧一:使用BeginUpdate()/EndUpdate()方法以提高性能
这将极大的提高性能,因为重绘动作仅仅在调用了EndUpdate()方法之后进行一次。
例如:
// 开始批量更新
c1Chart1.BeginUpdate();
int nser = 10, npts = 100;
for (int iser = 0; iser < nser; iser++)
{
// 创建数据数组
double[] x = new double[npts], y = new double[npts];
for (int ipt = 0; ipt < npts; ipt++)
{
x[ipt] = ipt;
y[ipt] = (1 + 0.05 * iser) * Math.Sin(0.1 * ipt + 0.1 * iser);
}
// 创建数据系列
XYDataSeries ds = new XYDataSeries();
ds.XValuesSource = x; ds.ValuesSource = y;
c1Chart1.Data.Children.Add(ds);
}
// 设置图表类型
c1Chart1.ChartType = ChartType.Line;
// 结束批量更新
c1Chart1.EndUpdate();
提示技巧二:对于大量的数据数组,使用折线图或者面积图
当您需要展示大量数据值时,折线图和面积图提供了最优的展示性能。
为了获取更佳的性能,通过设置attached属性,LineAreaOptions.OptimizationRadius启用大量数据展示优化。例如:
LineAreaOptions.SetOptimizationRadius(c1Chart1, 1.0);
强烈建议您使用比较小的值作为范围,比如说1.0~2.0。一个较大的值将影响绘图的精度。
提示技巧三:使用DataSeries.PlotElementLoaded事件更新绘图区元素的外观和行为
当任意绘图区元素(条形,柱形或者饼图,等等)加载完成时,将出发PlotElementLoaded(在线文档'PlotElementLoaded事件')事件。在此
事件中,您可以访问此绘图区元素,以及其关联的数据点。
以下代码按照y-轴的值的不同设置数据点的颜色。例如:
// 创建数据数组
int npts = 100;
double[] x = new double[npts], y = new double[npts];
for (int ipt = 0; ipt < npts; ipt++)
{
x[ipt] = ipt;
y[ipt] = Math.Sin(0.1 * ipt);
}
// 创建数据系列
XYDataSeries ds = new XYDataSeries();
ds.XValuesSource = x; ds.ValuesSource = y;
//设置事件处理器
ds.PlotElementLoaded += (s, e) =>
{
PlotElement pe = (PlotElement)s;
if (!(pe is Lines)) // skip lines
{
DataPoint dp = pe.DataPoint;
// 正规化 y-值(范围从 0 到 1)
double nval = 0.5*(dp.Value + 1);
// 填充色从蓝色(-1)变化到红色(+1)
pe.Fill = new SolidColorBrush(
Color.FromRgb((byte)(255 * nval), 0, (byte)(255 * (1-nval))));
}
};
// 添加数据系列至图表
c1Chart1.Data.Children.Add(ds);
// 设置图表类型
c1Chart1.ChartType = ChartType.LineSymbols;
提示技巧四:数据点标签及工具提示
为创建一个数据点标签或工具提示,您应当设置模版至PointLabelTemplate或者PointToolTipTemplate属性。
以下示例代码将演示如何显示每一个数据点的索引。
<c1chart:C1Chart Name="c1Chart1" ChartType="XYPlot">
<c1chart:C1Chart.Data>
<c1chart:ChartData>
<!-- source collection -->
<c1chart:ChartData.ItemsSource>
<PointCollection>
<Point X="1" Y="1" />
<Point X="2" Y="2" />
<Point X="3" Y="3" />
<Point X="4" Y="2" />
<Point X="5" Y="1" />
</PointCollection>
</c1chart:ChartData.ItemsSource>
<c1chart:XYDataSeries SymbolSize="16,16"
XValueBinding="{Binding X}" ValueBinding="{Binding Y}">
<c1chart:XYDataSeries.PointLabelTemplate>
<DataTemplate>
<!-- display point index at the center of point symbol -->
<TextBlock c1chart:PlotElement.LabelAlignment="MiddleCenter"
Text="{Binding PointIndex}" />
</DataTemplate>
</c1chart:XYDataSeries.PointLabelTemplate>
</c1chart:XYDataSeries>
</c1chart:ChartData>
</c1chart:C1Chart.Data>
</c1chart:C1Chart>
提示技巧五:将图表保存为图片
以下方法将一个图表的图片保存为Png文件格式。
using (var stm = System.IO.File.Create(fileName))
{
c1Chart1.SaveImage(stm, ImageFormat.Png);
}
提示技巧六:打印图表
以下代码在默认的打印机上采用默认的设置打印指定的图表。例如:
new PrintDialog().PrintVisual(c1Chart1, "chart");
提示技巧七:混合直角坐标图表类型
您可以容易地在同一个直角坐标系的绘图区通过使用ChartType属性混合显示不同的图表类型。
以下代码创建了三个数据系列,第一个是面积图,第二个是step图,第三个为默认的图表类型(折线图)。
int nser = 3, npts = 25;
for (int iser = 0; iser < nser; iser++)
{
// 创建数据数组
double[] x = new double[npts], y = new double[npts];
for (int ipt = 0; ipt < npts; ipt++)
{
x[ipt] = ipt;
y[ipt] = (1 + 0.05 * iser) * Math.Sin(0.1 * ipt + 0.1 * iser);
}
// 创建数据系列
XYDataSeries ds = new XYDataSeries();
ds.XValuesSource = x; ds.ValuesSource = y;
c1Chart1.Data.Children.Add(ds);
}
//设置图表类型
c1Chart1.ChartType = ChartType.Line;
// 第一系列
c1Chart1.Data.Children[0].ChartType = ChartType.Area;
// 第二个系列
c1Chart1.Data.Children[1].ChartType = ChartType.Step;