我现在要做一个类似jfreechart的画图工具。要实现类似jfreechart的setAutoRange这个功能。就是通过分析用户输入的点的数据,自动得到坐标系的范围和刻度,这个功能看似简单其实很复杂。因为用户输入的数据是随机的,所以还要考虑到小数的问题。我分析了jfreechart的代码,但是水平有限看不太懂。在这里想问问大家这个功能应该如何实现?大家给我提供一个思路。这里有两个必须解决的难题:
1.无论用户输入的点数据如何,自动生成的坐标范围和刻度必须越规整越好。
2. 生成的坐标系中刻度的大小要和实际显示到界面时候的大小相联系,使得无论何时,坐标系的网格大小都能一致。

解决方案 »

  1.   

    你还是把jfreechart的代码扒拉下来研究吧。这应该不是一句两句说得清楚的。
      

  2.   

    1.无论用户输入的点数据如何,自动生成的坐标范围和刻度必须越规整越好。 
      观察数据的最大值和最小值范围,初步定一个边界,随着数据的增多逐步修改,取所有数据的上下限,100以内的范围就自动分为100份,平均分,100以上可以分为1000份。
    2. 生成的坐标系中刻度的大小要和实际显示到界面时候的大小相联系,使得无论何时,坐标系的网格大小都能一致。
      试试视图转换功能,以不同的视图得到不同机构 vc貌似有类似坐标转化的函数,java应该也用只是随便说说自己的想法
      

  3.   

    我以前写过一个用JS绘制BarChart的程序也也遇到过同样的问题,我的解决方案是这样:
    1.扫描整个值序列,找出最小和最大值
    2.确定一个Y轴的最大分块个数,大于这个数显示起来会很难看,我当时定的是10
    3.用最小和最大值之差依次去除
     0.0000001,.0000002,.0000005
    ,0.000001,0.000002,0.000005
    ,0.00001,0.00002,0.00005,
    ......
    1,2,5
    ....
    1000,2000,5000
    ...
    知道遇到一个至使相除结果<=最大分块个数的那个
    这个值就是了