ASE Home Page Products Download Purchase Support About ASE
ChartDirector General
Forum HomeForum Home   SearchSearch

Message ListMessage List     Post MessagePost Message

  X坐标轴上的Label没有展开!
Posted by JerryLia on May-02-2016 22:34
Attachments:
您好,我在测试您的产品的时候遇到这样的问题,如下图所示:

我有两个double数组X[]和Y[],其中Y数组用来绘制曲线,而X数组用来显示标签。
其中X数组中的数据并不是从小到大排列的,而是具有跳跃性,比如:
double labels[] = { 0, 1, 2, 3, 4, 5, 24, 7};

我在绘制的时候,如下代码所示:

LineLayer* lineLayer =  c->addLineLayer(Y_DoubleArray, color, name);
lineLayer->setXData(X_DoubleArray);

绘制结果如下:
不知道问题出在哪里,烦请指点,不胜感激!
Untitled.png

  Re: X坐标轴上的Label没有展开!
Posted by Peter Kwan on May-03-2016 01:54
Hi JerryLia,

If the X[] is used for labels, please use Axis.setLabels, not Layer.setXData. For example:

c->addLineLayer(Y_DoubleArray, color, name);
c->xAxis()->setLabels(X_DoubleArray);

Regards
Peter Kwan

  Re: X坐标轴上的Label没有展开!
Posted by JerryLia on May-03-2016 06:32
Attachments:
Peter Kwan,您好!

根据您的建议将代码修改为:

LineLayer* lineLayer =  c->addLineLayer(Y_DoubleArray, color, name);
c->xAxis()->setLabels(X_DoubleArray);
c->xAxis()->setLabelStep(X_DoubleArray.len / 20);

但是显示的曲线图形并非是我想要的。请注意,X_DoubleArray中的数据并非是从小到大依次排列的,它可能是无序的。因此所画图形中,中间的X坐标值比较小,而两端的比较大。如下图所示:

我曾经使用过TeeChart,只要调用它的AddXY(double x,double y)方法,它会自动将X轴按照从小到大的顺序排列。
Untitled.png

  Re: X坐标轴上的Label没有展开!
Posted by Peter Kwan on May-04-2016 00:24
Hi JerryLia,

如果X数组是用作「显示标签」,那ChartDirector會把它看成「名字」一樣,只會把它顯示,而不理會它的意思。如果X数组是用作坐标,ChartDirector就會根據其數值來劃線。此時x-axis的标签會自動生成。例如 x = {0.97, 9.1, 5.6, 7, 2.32}, x-axis 的标签可能會是 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 通常不會和X数组完全一樣。

如果X数组是用作坐标, 可用你原來的方法:

LineLayer* lineLayer =  c->addLineLayer(Y_DoubleArray, color, name);
lineLayer->(X_DoubleArray);

你原來的問题可能是你圖中還有其它柬西,如Bar Chart。此時可用 Axis.setIndent 解決,例如:

http://www.chartdir.com/forum/download_thread.php?bn=chartdir_general&thread=1226312933#N1226318864

Regards
Peter Kwan

  Re: X坐标轴上的Label没有展开!
Posted by JerryLia on May-04-2016 21:41
Peter Kwan,您好!

非常感谢您耐心的解答!

我仔细检查了我的代码,按照您所说的能够画出正确的图形。

事实上,我想做一个类似financedemo的图形,于是我从MultiChart继承,参照financedemo例子进行修改,但最终不能正确显示图像,也就是X轴标签无法展开。

我附带了一个demo工程用来展示我所说的问题。请帮忙看看问题到底出在哪里!

由于不能上传大的附件,所以我放到百度网盘,多有不便敬请原谅!

http://pan.baidu.com/s/1jIgyxs6

  Re: X坐标轴上的Label没有展开!
Posted by Peter Kwan on May-05-2016 04:34
Hi JerryLia,

I have not actually run your code, but I read your code and see that there is a line in IMUChart.cpp:

a->setIndent(true);

Please change the above to the followings to see if this can solve the problem:

a->setIndent(false);

Regards
Peter Kwan

  Re: X坐标轴上的Label没有展开!
Posted by JerryLia on May-05-2016 08:15
问题解决了,非常感谢!