找回密码
 立即注册

QQ登录

只需一步,快速开始

fffgggfff3

注册会员

1

主题

4

帖子

15

积分

注册会员

积分
15
最新发帖
fffgggfff3
注册会员   /  发表于:2018-3-29 10:14  /   查看:4552  /  回复:8
项目设计工控,需将接收到的报文转化为[50,100]的矩阵进而绘制出相应的三维柱状谱图,效果大致如下:

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

8 个回复

倒序浏览
JeffryLI
葡萄城公司职员   /  发表于:2018-3-29 10:39:02
沙发
您好,这个问题牵扯性能平衡的问题,我需要向研发确认下,如果您能提供这个case的demo,就更好呈现验证了。我也会金币奖励您。谢谢支持。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
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[xlen, ylen];
            for (int ix = 0; ix < xlen; ix++)
            {
                for (int iy = 0; iy < ylen; iy++)
                {
                    zdata0[ix, iy] = ix - iy;
                }
            }
            this.chart.Children.Add(new GridDataSeries() { ZData = zdata0 });

}

void chartLoadXY()
{

            int xlen = 100, ylen = 50;
            double[][] zdata = new double[ylen][];
            int[] xdata = new int[xlen];
            int[] ydata = new int[ylen];
            for (int iy = 0; iy < ylen; iy++)
            {
                ydata[iy] = iy;
                zdata[iy] = new double[xlen];
                for (int ix = 0; ix < xlen; ix++)
                {
                    zdata[iy][ix] = ix - iy;
                    if (iy == 0)
                    {
                        xdata[ix] = 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[iy];
                this.chart1.Data.Children.Add(ds);
            }

}

void chartLoadXYZ()
{

            int xlen = 100, ylen = 50;
            double[][] zdata = new double[ylen][];
            int[] xdata = new int[xlen];
            int[] ydata = new int[ylen];
            for (int iy = 0; iy < ylen; iy++)
            {
                ydata[iy] = iy;
                zdata[iy] = new double[xlen];
                for (int ix = 0; ix < xlen; ix++)
                {
                    zdata[iy][ix] = ix - iy;
                    if (iy == 0)
                    {
                        xdata[ix] = 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[ix];
                    p3.Y = ydata[iy];
                    p3.Z = zdata[iy][ix];
                    d3.Points.Add(p3);
                }
            }
            this.chart1.Data.Children.Add(d3);

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +200 收起 理由
JeffryLI + 200 神马都是浮云

查看全部评分

回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-3-29 13:42:12
地板
收到,我们这边调查一下,有结果立即会通知你。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-3-29 17:50:14
5#
您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 }
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
fffgggfff3
注册会员   /  发表于:2018-3-30 10:52:55
6#
JeffryLI 发表于 2018-3-29 17:50
您好,这个是您自定义的类吗?new GridDataSeries() { ZData = zdata0 }

GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART中没有
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-3-30 11:42:28
7#
fffgggfff3 发表于 2018-3-30 10:52
GridDataSeries()这个方法在C1CHART3D中的public class GridDataSeries : DependencyObject类里
C1CHART ...

您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗?
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
fffgggfff3
注册会员   /  发表于:2018-3-30 12:41:38
8#
JeffryLI 发表于 2018-3-30 11:42
您好,上上面的你发的代码调用顺序是,您发的那个winform mschart我参考了,能把使用我们控件的demo给我吗 ...




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-3-30 18:28:26
9#

收到,我尽快验证
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部