0

我正在尝试制作一个重叠的情节,而我的问题是我无法使第二个情节适合第二个情节。这是我的第一个情节: 在此处输入图像描述

这里是第二个: 在此处输入图像描述

当我尝试同时满足两者时,这就是我得到的:

在此处输入图像描述

所以基本上,我想把整个第二个图都放在 0 到 30 之间,我怎样才能在不丢失任何数据的情况下做到这一点?

首先我尝试使用plot.mapDatasetToRangeAxis()

然后我尝试了:

 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);
}
4

2 回答 2

1

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

于 2013-09-20T10:27:37.857 回答
0

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

        priceXYPlot.setRangeAxis( new new NumberAxis( "Y" ) );
        priceXYPlot.setDomainAxis( 0, new NumberAxis( "X1" ) );
        priceXYPlot.setDomainAxis( 1, new NumberAxis("X2") );

和 mapDatasetToRangeAxis 以便您在顶部和底部有两个差异 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

共享 x 轴,两个 Y 轴图

于 2017-08-07T18:24:52.597 回答