SAEUSER001 发表于 2014-7-14 13:43:00

关于3D Surface Chart Z轴刻度范围调节问题。

你好!在3D Surface Chart中,,我的代码设置的Z轴范围是30~40,为什么在图上Z轴显示的却是0~38呢?    以下是我的部分代码。

      for (int i = 3; i < lines.Length; i++)
            {
                string[] values = lines.Split(',');

                for (int j = 1; j < values.Length; j++)
                {
                  if (string.IsNullOrEmpty(values.Trim()))
                  {
                        z = -999.0f;
                  }
                  else
                  {
                        if (double.Parse(values.Trim()) < 5 ||
                           double.Parse(values.Trim()) > 50)
                        {
                            z = -999.0f;
                        }
                        else
                        {
                            //-1.00N
                            if (values.Trim().IndexOf('N') > 0)
                            {
                              z = -999.0f;
                            }
                            else
                            {
                              z = double.Parse(values.Trim());
                            }
                        }
                  }
                }
            }

      Chart3DAxis za = c1Chart3D1.ChartArea.AxisZ;
            za.Max = 40;
            za.Min = 30;
            za.UnitMajor = 2;
            za.UnitMinor = 1;
            Chart3DDataSetGrid griddata = null;
            griddata = new Chart3DDataSetGrid(1, 1, 1, 1, z);
            griddata.Hole = -999.0f;
            c1Chart3D1.ChartGroups.ChartData.SetGrid = griddata;

Alice 发表于 2014-7-14 16:32:00

回复 1楼SAEUSER001的帖子

你好,请问你是否设置了AutoMax 和 AutoMin属性?
当这两个属性是True的时候图表自动计算轴的范围。
而且Max、Min的取值必须在自动计算出的范围里取值。这个自动计算的值是根据图表数据算出来的。

SAEUSER001 发表于 2014-7-15 09:48:00

回复 2楼Alice的帖子

你好,我已经设置以下属性为false啊!但是还是无法调节, 如果Z轴刻度范围无法调节的话,很难看出数据趋势。附上测试代码及用ChartDirector作出的3D Surface图,谢谢!
      za.AutoMax = false;
            za.AutoMin = false;
            za.AutoMinor = false;
            za.AutoMajor = false;

Alice 发表于 2014-7-15 18:20:00

回复 3楼SAEUSER001的帖子

你好。
你的代码示例我已经测试过了,的确存在你所说的问题。
该问题已经提交到产品组,如果有反馈我再通知你。

Alice 发表于 2014-7-16 17:54:00

回复 3楼SAEUSER001的帖子

你好,这是产品的设计,Max/Min不能设置在数据的最小值到最大值之间。
如果轴的Min值设置大于你数据的最小值,或是Max值设置小于你数据的最大值,都会重置为默认值。

SAEUSER001 发表于 2014-7-16 20:16:00

回复 5楼Alice的帖子

你好, 这个我也试个啊,也是不行滴,另外Z轴的刻度值无法格式化成我想要保留的小数点后2位数。
   1) 绘图前置 35~50之外的数据为Hole 数据。
               if (double.Parse(values.Trim()) < 35 ||
                           double.Parse(values.Trim()) > 50)
                        {
                            z = -999.0f;
                        }
            ......
            griddata.Hole = -999.0f;

    2) Z 轴的设置如下。
      za.Max = 60;
            za.Min = 30;

Alice 发表于 2014-7-17 11:27:00

回复 6楼SAEUSER001的帖子

你好。
第一个问题:Z轴刻度值的格式化可以用值注释来做。分别用AnnoFormat 和AnnoFormatString。比如代码参考:
za.AnnoFormat = FormatEnum.NumericManual;
za.AnnoFormatString = &quot;##.00,&quot;;
有关值注释请看我们的中文帮助文档:http://www.gcpowertools.com.cn/docs/ComponentOne/WinFormChart/#!Documents/_146.htm

第二个问题:若是你采用35-50之外的数据为Hole,那么za.Max可以设置为60,za.Min可以设置为30.在我本机设置是没有问题的。
你可以用如下代码得到数据的Z轴的最大值和最小值:
Chart3DData d1 = c1Chart3D1.ChartGroups.ChartData;
d1.GetMax(AxisTypeEnum.AxisZ);
d1.GetMin(AxisTypeEnum.AxisZ));
然后你设置的c1Chart3d.ChartArea.AxisZ.Max/Min的值不能在上面的范围内。

注意:先要将数据写入C1Chart3d,然后才能设置C1chart3d.ChartArea.AxisZ的最大值和最小值。
否则一开始设置Max/Min,由于数据不存在C1Chart3d里,设置是不会起作用的。

打开你上次给我的sample,将下图的代码注掉,然后移到最后的设置,在我的机子是OK的。



我把你的Samle改了,然后发上来,你可以看看区别。

SAEUSER001 发表于 2014-7-18 13:37:00

回复 7楼Alice的帖子

你好! 谢谢你的回复,ComponentOne 的3D chart数值的范围很大程度上决定了Z轴的刻度范围, 这是我对33~66范围内数据绘制的3D Surface图,效果还行,但是Legend条上的数值不知是否能格式化为保留小数点后2位?

SAEUSER001 发表于 2014-7-18 13:50:00

回复 8楼SAEUSER001的帖子

另外一个问题是,窗体最大化或Resize一定大小(比如width:1145,Height:668)后图形无法显示, 我的显示器为4:3比例的17寸显示器,屏幕分辨率设置为1280X1204。

Alice 发表于 2014-7-18 16:20:00

回复 9楼SAEUSER001的帖子

这两个问题暂时没找到解决方法。
现在反馈到产品组等待解决方案。
页: [1] 2
查看完整版本: 关于3D Surface Chart Z轴刻度范围调节问题。