使用JFreeChart为两个系列设置不同的y轴 [英] Setting different y-axis for two series with JFreeChart

查看:363
本文介绍了使用JFreeChart为两个系列设置不同的y轴的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用JFreeChart通过线图绘制两个系列的数据(XYSeries). 复杂的因素是,其中一个数据系列的y值通常比我的第二个数据系列的y值高得多(假设第一个系列的y值大约为数百万,而第二个系列的y值在数百个数量级.我的第一个数据集中存在高值,导致图的范围如此之大,以至于我的第二个数据集中的y值不再可理解.

I am using JFreeChart to plot two series of data (XYSeries) using a linechart. The complicating factor is that one of the data series has y-values that are typically much higher than the y-values of my second data series (let's say that the first series has y-values in the order of magnitude of millions, while the second series has y-values in the order of magnitude of hundreds). The existence of the high values in my first data set cause the range of the plot to be such that the y-values of my second data set are not comprehensible anymore.

在图上添加第二个y轴,以使我的两个数据系列都使用自己的y轴,即可解决此问题.有人知道如何使用JFreeChart做到这一点吗?

Adding a second y-axis to the plot, such that both my data series use their own y-axis, would solve this problem. Does anyone know how to do this with JFreeChart?

用于完整性的当前代码:

Current code for completeness:

XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("series1");
XYSeries series2 = new XYSeries("series2");

// Here is my code to fill series1 and series2 with data    

dataset.addSeries(series1);
dataset.addSeries(series2);

JFreeChart chart = ChartFactory.createXYLineChart(
    "title", "x-axis title", "y-axis title", dataset, PlotOrientation.VERTICAL, true, true, false
);
chart.getXYPlot().setRenderer(new XYSplineRenderer());

推荐答案

您可以手动创建JFreeChart对象,而不使用ChartFactory.首先生成数据集并绘制,将每个数据集设置为索引.然后,您可以使用必要的Axis和Renderer自定义绘图.这是一个使用具有两个数据集(每个数据集具有不同的y值)的伪数据来执行此操作的示例:

You can manually create the JFreeChart object instead of using ChartFactory. First generate the datasets and Plot, setting each dataset to an index. Then you can customize the Plot with the necessary Axis and Renderer. Here's an example for doing so with dummy data that has two datasets, each with different magnitude y-values:

    //create the series - add some dummy data
    XYSeries series1 = new XYSeries("series1");
    XYSeries series2 = new XYSeries("series2");
    series1.add(1000, 1000);
    series1.add(1150, 1150);
    series1.add(1250, 1250);

    series2.add(1000, 111250);
    series2.add(1150, 211250);
    series2.add(1250, 311250);

    //create the datasets
    XYSeriesCollection dataset1 = new XYSeriesCollection();
    XYSeriesCollection dataset2 = new XYSeriesCollection();
    dataset1.addSeries(series1);
    dataset2.addSeries(series2);

    //construct the plot
    XYPlot plot = new XYPlot();
    plot.setDataset(0, dataset1);
    plot.setDataset(1, dataset2);

    //customize the plot with renderers and axis
    plot.setRenderer(0, new XYSplineRenderer());//use default fill paint for first series
    XYSplineRenderer splinerenderer = new XYSplineRenderer();
    splinerenderer.setSeriesFillPaint(0, Color.BLUE);
    plot.setRenderer(1, splinerenderer);
    plot.setRangeAxis(0, new NumberAxis("Series 1"));
    plot.setRangeAxis(1, new NumberAxis("Series 2"));
    plot.setDomainAxis(new NumberAxis("X Axis"));

    //Map the data to the appropriate axis
    plot.mapDatasetToRangeAxis(0, 0);
    plot.mapDatasetToRangeAxis(1, 1);   

    //generate the chart
    JFreeChart chart = new JFreeChart("MyPlot", getFont(), plot, true);
    chart.setBackgroundPaint(Color.WHITE);
    JPanel chartPanel = new ChartPanel(chart);

这篇关于使用JFreeChart为两个系列设置不同的y轴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆