JFreeChart生成XYChart时折线过原点(0,0)如何解决?
问题解决方法
根因分析
折线异常回落至原点通常由以下两个原因导致:
mc.x、mc.y数组存在未赋值的元素,默认值为0被加入数据系列,导致连线时多了(0,0)的异常点XYSeries默认开启X轴数值自动排序功能,如果你传入的x数组不是严格升序排列,JFreeChart会将所有点按X值从小到大重排后再连线,就会出现折线跳回小X值(包括原点)的异常表现。
修复方案
方案1:关闭XYSeries自动排序(最常用,适配任意X值顺序的输入数据)
修改createDataset方法中创建XYSeries的代码,使用多参数构造方法关闭自动排序功能:
// 构造参数说明:1.系列名称 2.是否自动对X值排序 3.是否允许重复X值 final XYSeries equation1 = new XYSeries(mc.eq, false, true);
改完后数据会严格按照你数组的添加顺序连线,不会因为重排序出现跳变。
方案2:校验数组数据有效性
如果确认是数组存在未赋值的0值导致的问题,先清理数组无效数据,或者调整遍历范围只取有效数据即可。你可以临时加打印日志确认数据:
for (short i = 0; i<200; i++){ // 打印所有待添加的坐标,排查是否有异常0值 System.out.printf("第%d个点:x=%f, y=%f%n", i, mc.x[i], mc.y[i]); equation1.add(mc.x[i] , mc.y[i]); }
方案3:预先对数据排序
如果你确实需要保留XYSeries的自动排序功能,提前将x和y数组按x值升序排序后再加入数据系列,也可以避免折线跳变问题。
内容的提问来源于stack exchange,提问作者Jacques Xuereb
相关产品推荐
相关产品推荐

