Java 使用JFreechart调整适合另一轴的轴的大小

Java 使用JFreechart调整适合另一轴的轴的大小,java,plot,jfreechart,Java,Plot,Jfreechart,我想画一个叠加的图, 我的问题是,我不能让第二个情节与第二个情节相匹配。 这是我的第一个情节: 这里是第二个: 当我尝试两者都适合时,我得到的是: 因此,基本上,我想在0到30之间拟合整个第二个图,如何在不丢失任何数据的情况下进行拟合 首先,我尝试使用plot.mapdatasetOrangeAxis() 然后我试着: domain.setRange(0.00, 30.0); domain.setTickUnit(new NumberTickUnit(1)); 但是我不能让第一个和

我想画一个叠加的图, 我的问题是,我不能让第二个情节与第二个情节相匹配。 这是我的第一个情节:

这里是第二个:

当我尝试两者都适合时,我得到的是:

因此,基本上,我想在0到30之间拟合整个第二个图,如何在不丢失任何数据的情况下进行拟合

首先,我尝试使用
plot.mapdatasetOrangeAxis()

然后我试着:

 domain.setRange(0.00, 30.0);
 domain.setTickUnit(new NumberTickUnit(1)); 
但是我不能让第一个和第二个都像我所希望的那样工作。 你还有别的想法吗?(除了买东西——作为一名学生,我现在买不起)。 任何帮助都将不胜感激:)

哦,顺便说一句,x轴是一个速度(忘记在绘图上画了)

这是一张非常难看的照片,我希望得到这样的结果(在x轴和y轴上有拟合单位): 对不起,我的Gimp技能太差了。

以下是我所做的:

    private JFreeChart createOverlaidChart() 
{
    final NumberAxis domainAxis = new NumberAxis("Speed (m / s)");
    final ValueAxis rangeAxis = new NumberAxis("Power (kw)");

    // create plot ...
    final IntervalXYDataset data0 = createDataset0();
    final XYItemRenderer renderer0 = new XYBarRenderer(0.20);
    // change "new XYBarRenderer(0.20)" to "StandardXYItemRenderer()" if you want to change  type of graph
    final XYPlot plot = new XYPlot(data0, domainAxis, rangeAxis, renderer0);

    // add a second dataset and renderer... 
    final IntervalXYDataset data1 = createDataset1();
    final XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer(false, true); 
    // arguments of new XYLineAndShapeRenderer are to activate or deactivate the display of points or line. Set first argument to true if you want to draw lines between the points for e.g.
    plot.setDataset(1, data1);
    plot.setRenderer(1, renderer1);

    // add a third dataset and renderer... 
    final IntervalXYDataset data2 = createDataset2();
    final XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(true, true); 
    // arguments of new XYLineAndShapeRenderer are to activate or deactivate the display of points or line. Set first argument to true if you want to draw lines between the points for e.g.
    plot.setDataset(2, data2);
    plot.setRenderer(2, renderer2);

    plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

    // return a new chart containing the overlaid plot...
    return new JFreeChart("Test", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
}

范围轴是垂直/Y轴,您需要在图表中添加第二个(水平/X轴)。

我做了类似的事情——虽然使用相同的X轴值,但不同的Y轴。为此,我使用单一域(您可能需要单一范围)。我为您转换(由于我的编辑,可能会有打字错误):

和MapDataSetOrangeAxis,这样就有了沿顶部和底部的两个diff X轴,类似于:

        priceXYPlot.setDataset( 0, data0);
        priceXYPlot.mapDatasetToDomainAxis( 0, 0 ); //1st dataset to 1st x-axis
        priceXYPlot.setDataset( 1, data1 );
        priceXYPlot.mapDatasetToDomainAxis( 1, 1 ); //2nd dataset to 2nd x-axis

关键是我想使用相同的轴。。。有可能吗?还是我误解了你?(我添加了我的代码)@trolologuy第一个(绿色)数据集域是0-31,第二个(红色)数据集域是0-4500),因此当您在同一轴上绘制两个数据集时,第一个数据集显示为挤压。要创建所需的策略,您需要将第一个数据集的域映射到第二个数据集;例如,如果第一个数据集(以秒为单位,第二个以毫秒为单位)可以在域ValveKey集上进行转换,那么我如何将第一个数据集映射到第二个数据集?@trolologuy两个域0-31和0-4500的单位是多少?我可以看到范围以Kw为单位,单位应该是m/s(以米/秒为速度),但对于第二个图,它显然不是m/s。我现在也不知道它显示的是什么单位…(我有点困惑)。我认为这仅仅是点的数量,因为我用我的点做了一个自定义数组,他以x轴单位显示了我使用的点的数量。
        priceXYPlot.setDataset( 0, data0);
        priceXYPlot.mapDatasetToDomainAxis( 0, 0 ); //1st dataset to 1st x-axis
        priceXYPlot.setDataset( 1, data1 );
        priceXYPlot.mapDatasetToDomainAxis( 1, 1 ); //2nd dataset to 2nd x-axis