WPF下多点三维柱形谱图的绘制
项目设计工控,需将接收到的报文转化为的矩阵进而绘制出相应的三维柱状谱图,效果大致如下:目前尝试了以下方法,均未得到较为理想的结果:
1)Chart3D
该模式仅支持surface类charttype,无法绘制column3D图;
2)Chart XYSeries
每个Series为100个点,添加50个Series,由于未知原因(可能是系统资源开销等),当Series数量达到两位数时程序卡顿,进而无法加载;
3)Chart XYZSeries
一个Series,循环添加了5000个Points,可能由于(2)的原因,点数过多导致图无法加载出,因为当削减点的数量时图谱可正常绘制。
初步分析,可能是因为二维柱状图的每个点都有独立的交互特性,占用资源较多,而这一点在我当前的项目中是不需要的。
所以请问是否有相应的平衡策略,或是其他的绘图方法能达成图示效果?
多谢。
您好,这个问题牵扯性能平衡的问题,我需要向研发确认下,如果您能提供这个case的demo,就更好呈现验证了。我也会金币奖励您。谢谢支持。 JeffryLI 发表于 2018-3-29 10:39
您好,这个问题牵扯性能平衡的问题,我需要向研发确认下,如果您能提供这个case的demo,就更好呈现验证了。 ...
case的demo如附件,原本用winform下自带的mschart实现
用C1CHART 或 C1CHART3D尝试的代码如下(我注意到,winform版的c1chart3d包含bar这种type,外形与column类似,但wpf版只有surface)
void chartLoad3D()
{
this.chart.Children.Clear();
int xlen = 100, ylen = 50;
double[,] zdata0 = new double;
for (int ix = 0; ix < xlen; ix++)
{
for (int iy = 0; iy < ylen; iy++)
{
zdata0 = ix - iy;
}
}
this.chart.Children.Add(new GridDataSeries() { ZData = zdata0 });
}
void chartLoadXY()
{
int xlen = 100, ylen = 50;
double[][] zdata = new double[];
int[] xdata = new int;
int[] ydata = new int;
for (int iy = 0; iy < ylen; iy++)
{
ydata = iy;
zdata = new double;
for (int ix = 0; ix < xlen; ix++)
{
zdata = ix - iy;
if (iy == 0)
{
xdata = ix;
}
}
}
this.chart1.Data.Children.Clear();
for (int iy = 0; iy < ylen; iy++)
{
XYDataSeries ds = new XYDataSeries();
ds.ChartType = ChartType.Column3D;
ds.XValuesSource = xdata;
ds.ValuesSource = zdata;
this.chart1.Data.Children.Add(ds);
}
}
void chartLoadXYZ()
{
int xlen = 100, ylen = 50;
double[][] zdata = new double[];
int[] xdata = new int;
int[] ydata = new int;
for (int iy = 0; iy < ylen; iy++)
{
ydata = iy;
zdata = new double;
for (int ix = 0; ix < xlen; ix++)
{
zdata = ix - iy;
if (iy == 0)
{
xdata = ix;
}
}
}
this.chart1.Data.Children.Clear();
XYZDataSeries d3 = new XYZDataSeries();
d3.ChartType = ChartType.Column3D;
d3.Points = new System.Windows.Media.Media3D.Point3DCollection();
for (int iy = 0; iy < ylen; iy++)
{
for (int ix = 0; ix < xlen; ix++)
{
System.Windows.Media.Media3D.Point3D p3 = new System.Windows.Media.Media3D.Point3D();
p3.X = xdata;
p3.Y = ydata;
p3.Z = zdata;
d3.Points.Add(p3);
}
}
this.chart1.Data.Children.Add(d3);
}
收到,我们这边调查一下,有结果立即会通知你。 您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 } JeffryLI 发表于 2018-3-29 17:50
您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 }
GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART中没有 fffgggfff3 发表于 2018-3-30 10:52
GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART ...
您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗? JeffryLI 发表于 2018-3-30 11:42
您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗 ...
fffgggfff3 发表于 2018-3-30 12:41
收到,我尽快验证
页:
[1]