fffgggfff3 发表于 2018-3-29 10:14:34

WPF下多点三维柱形谱图的绘制

项目设计工控,需将接收到的报文转化为的矩阵进而绘制出相应的三维柱状谱图,效果大致如下:

目前尝试了以下方法,均未得到较为理想的结果:
1)Chart3D
该模式仅支持surface类charttype,无法绘制column3D图;
2)Chart XYSeries
每个Series为100个点,添加50个Series,由于未知原因(可能是系统资源开销等),当Series数量达到两位数时程序卡顿,进而无法加载;
3)Chart XYZSeries
一个Series,循环添加了5000个Points,可能由于(2)的原因,点数过多导致图无法加载出,因为当削减点的数量时图谱可正常绘制。
初步分析,可能是因为二维柱状图的每个点都有独立的交互特性,占用资源较多,而这一点在我当前的项目中是不需要的。
所以请问是否有相应的平衡策略,或是其他的绘图方法能达成图示效果?
多谢。

JeffryLI 发表于 2018-3-29 10:39:02

您好,这个问题牵扯性能平衡的问题,我需要向研发确认下,如果您能提供这个case的demo,就更好呈现验证了。我也会金币奖励您。谢谢支持。

fffgggfff3 发表于 2018-3-29 12:07:59

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);

}

JeffryLI 发表于 2018-3-29 13:42:12

收到,我们这边调查一下,有结果立即会通知你。

JeffryLI 发表于 2018-3-29 17:50:14

您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 }

fffgggfff3 发表于 2018-3-30 10:52:55

JeffryLI 发表于 2018-3-29 17:50
您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 }

GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART中没有

JeffryLI 发表于 2018-3-30 11:42:28

fffgggfff3 发表于 2018-3-30 10:52
GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART ...

您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗?

fffgggfff3 发表于 2018-3-30 12:41:38

JeffryLI 发表于 2018-3-30 11:42
您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗 ...




JeffryLI 发表于 2018-3-30 18:28:26

fffgggfff3 发表于 2018-3-30 12:41


收到,我尽快验证
页: [1]
查看完整版本: WPF下多点三维柱形谱图的绘制