我似乎无法为所有四条线设置单独的线条颜色.当我使用线条时:
plot.getRenderer().setSeriesPaint(0, new Color(0x00, 0xFF, 0x00));
plot.getRenderer().setSeriesPaint(1, new Color(0x00, 0x00, 0x00));
Run Code Online (Sandbox Code Playgroud)
(在下面的代码中),它将第一行应用于BOTH数据集中的FIRST系列,将第二行应用于BOTH数据集中的SECOND系列.
如何为所有4条线设置不同的颜色?
谢谢!
private JFreeChart createXYLineChart(String title) {
XYDataset dataset1 = createXYVoltageDataset();
XYDataset dataset2 = createXYCurrentDataset();
JFreeChart chart = ChartFactory.createXYLineChart("Profile", "Set Current", "Voltage", null);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDataset(0, dataset1);
plot.setDataset(1, dataset2);
plot.setRangeAxis(1, new NumberAxis("Actual Current"));
plot.mapDatasetToRangeAxis(1, 1); //2nd dataset to 2nd y-axi
plot.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF));
plot.setDomainGridlinePaint(new Color(0x00, 0x00, 0xff));
plot.setRangeGridlinePaint(new Color(0xff, 0x00, 0x00));
plot.getRenderer().setSeriesPaint(0, new Color(0x00, 0xFF, 0x00));
plot.getRenderer().setSeriesPaint(1, new Color(0x00, 0x00, 0x00));
//plot.getRenderer().setSeriesPaint(2, new Color(0xFF, 0x00, 0x00)); // Does nothing
//plot.getRenderer().setSeriesPaint(3, new Color(0x00, 0x00, 0xFF)); // Does nothing
//plot.getRenderer(1).setSeriesPaint(3, new Color(0x00, 0x00, 0xFF)); // Null pointer exceptiopn
return chart;
}
private XYDataset createXYVoltageDataset() {
final XYSeries s1 = new XYSeries("Min Voltage");
final XYSeries s2 = new XYSeries("Max Voltage");
for (int i = 0; i < profile.getNumSteps(); i++) s1.add(i, profile.getStepMinVoltage(i));
for (int i = 0; i < profile.getNumSteps(); i++) s2.add(i, profile.getStepMaxVoltage(i));
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(s1);
dataset.addSeries(s2);
return dataset;
}
private XYDataset createXYCurrentDataset() {
final XYSeries s1 = new XYSeries("Min Current");
final XYSeries s2 = new XYSeries("Max Current");
for (int i = 0; i < profile.getNumSteps(); i++){
s1.add(i, profile.getStepMinCurrent(i));
}
for (int i = 0; i < profile.getNumSteps(); i++) s2.add(i, profile.getStepMaxCurrent(i));
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(s1);
dataset.addSeries(s2);
return dataset;
}
Run Code Online (Sandbox Code Playgroud)
这是我的最终解决方案:
XYDataset dataset1 = createXYVoltageDataset();
XYDataset dataset2 = createXYCurrentDataset();
XYLineAndShapeRenderer r1 = new XYLineAndShapeRenderer();
r1.setSeriesPaint(0, new Color(0xff, 0xff, 0x00));
r1.setSeriesPaint(1, new Color(0x00, 0xff, 0xff));
r1.setSeriesShapesVisible(0, false);
r1.setSeriesShapesVisible(1, false);
XYLineAndShapeRenderer r2 = new XYLineAndShapeRenderer();
r2.setSeriesPaint(0, new Color(0xff, 0x00, 0x00));
r2.setSeriesPaint(1, new Color(0x00, 0xff, 0x00));
r2.setSeriesShapesVisible(0, false);
r2.setSeriesShapesVisible(1, false);
JFreeChart chart = ChartFactory.createXYLineChart("Profile", "Set Current", "Voltage", null);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDataset(0, dataset1);
plot.setRenderer(0, r1);
plot.setDataset(1, dataset2);
plot.setRenderer(1, r2);
plot.setRangeAxis(1, new NumberAxis("Actual Current"));
plot.mapDatasetToRangeAxis(1, 1); //2nd dataset to 2nd y-axi
plot.setBackgroundPaint(new Color(0xFF, 0xFF, 0xFF));
plot.setDomainGridlinePaint(new Color(0x00, 0x00, 0xff));
plot.setRangeGridlinePaint(new Color(0xff, 0x00, 0x00));
return chart;
Run Code Online (Sandbox Code Playgroud)
I\xc2\xb4d 创建我自己的绘图和两个渲染器,而new不是chart.getPlot()或plot.getRenderer()。I\xc2\xb4ll 尝试给出一个与您的代码类似的示例,以便您明白我的意思;你\xc2\xb4ll必须调整它以满足你的需要:
private JFreeChart createChart(String title) {\n XYDataset dataset1 = createDataset1();\n XYDataset dataset2 = createDataset2();\n\n XYBarRenderer renderer1 = new XYBarRenderer(0.20000000000000001D);\n renderer1.setSeriesPaint(0, Color.BLUE);\n renderer1.setSeriesPaint(1, Color.red);\n DateAxis domainAxis = new DateAxis("Date");\n NumberAxis valueAxis = new NumberAxis("Value");\n XYPlot plot = new XYPlot(dataset1, domainAxis, valueAxis, renderer1);\n\n StandardXYItemRenderer renderer2 = new StandardXYItemRenderer();\n renderer2.setSeriesPaint(0, Color.CYAN);\n renderer2.setSeriesPaint(1, Color.YELLOW);\n\n plot.setDataset(1, dataset2);\n plot.setRenderer(1, renderer2);\n\n JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);\n\n return chart;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:顺便说一句,如果您经常使用 JFreeChart,我\xc2\xb4d 建议购买该指南。除了非常有用的 PDF 之外,您还可以在演示中心获得所有示例的源代码,这是非常宝贵的。
\n| 归档时间: |
|
| 查看次数: |
12583 次 |
| 最近记录: |