|
X坐标轴上的Label没有展开! |
Posted by JerryLia on May-02-2016 22:34 |
|
您好,我在测试您的产品的时候遇到这样的问题,如下图所示:
我有两个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);
绘制结果如下:
不知道问题出在哪里,烦请指点,不胜感激!
|
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 |
|
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轴按照从小到大的顺序排列。
|
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 |
|
问题解决了,非常感谢! |
|