JFreeChart:如何在同一张图表上绘制折线图和散点图

3
我有两组数据。
int[] x1 = {1,2,3,4,5,6,7,8,9,10};
int[] y1 = {1,2,3,5,6,8,9,10,14,11};

int[] x2 = {1,2,3,4,5,6,7,8,9,10};
int[] y2 = {0,2,3,5,0,8,9,8,14,11};

int[] z2 = {1,2,3,1,2,3,1,2,3,1};

我希望绘制x1,y1XYLineChart,然后在同一图表上绘制x2,y2的散点图而不需要连线。
我还需要使xy,y2的每个散点根据z2的值显示不同的颜色(1=Color.red, 2=Color.green, 3=Color.blue)
我应该怎么做?
到目前为止,我的代码是:
JPanel panel_1 = new JPanel();
panel_1.setLayout(new BorderLayout(0, 0));
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("series1");
for(int i=0; i<x1.length; i++){
    series1.add(x1[i],y1[i]);
}
dataset.add(series1);
JFreeChart chart = ChartFactory.createXYLineChart("Title", "x", "y", dataset, PlotOrientation.VERTICAL, false, false, false);
ChartPanel cp = new ChartPanel(chart);
panel_1.add(cp, BorderLayout.CENTER);

此部分涉及折线图的排序。我现在需要编写散点图,使用x2,y2(带有上述描述的颜色),这是我卡住的地方。


1
看这里:http://stackoverflow.com/questions/6076133/turning-the-second-timeseries-in-a-timeserieschart-to-a-barchart 不完全相同但相关。你试过添加第二个渲染器吗?请参见http://code.google.com/p/swing-ui-hxzon/source/browse/trunk/jfreechart/org/jfree/chart/demo/OverlaidXYPlotDemo2.java?r=65&spec=svn65以获取示例代码的副本。 - flup
1个回答

8

createXYLineChart()方法将创建一个使用XYLineAndShapeRenderer的图表。因此,从绘图中获取渲染器并将其转换为XYLineAndShapeRenderer。然后,您可以调用setSeriesLinesVisible()setSeriesShapesVisible()方法来控制每个系列是否为数据项绘制形状和/或线条。这样,您可以使用单个渲染器和数据集,使事情变得更简单。

您希望根据另一个数据值更改颜色,需要进行一些额外的工作。您应该对XYLineAndShapeRenderer类进行子类化,并覆盖getItemPaint(int, int)方法。在这里,您可以为数据项返回任何颜色。默认实现查看系列索引并返回系列的颜色。您需要查看项目索引,然后在z值表中进行查找并决定要返回什么颜色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接