Java 多系列颜色问题折线图

Java 多系列颜色问题折线图,java,jfreechart,Java,Jfreechart,代码使用折线图显示了3个系列的图形。我为每个系列设置了3种不同的颜色。但实际情况是,前两个系列显示的颜色与我设置为系列1的颜色相同。系列3显示了一种我没有设置的不同颜色 public class LineChartServlet extends HttpServlet { private static final long serialVersionUID = 1L; private Connection dbConnection = null; JDBCCategoryDataset d

代码使用折线图显示了3个系列的图形。我为每个系列设置了3种不同的颜色。但实际情况是,前两个系列显示的颜色与我设置为系列1的颜色相同。系列3显示了一种我没有设置的不同颜色

public class LineChartServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private Connection dbConnection  = null;

JDBCCategoryDataset dataset1,dataset2,dataset3;

public LineChartServlet() {
    dbConnection  = DaoDbUtil.getConnection();
   }

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

     dataset1 = new JDBCCategoryDataset(dbConnection);
     dataset2 = new JDBCCategoryDataset(dbConnection);
     dataset3 = new JDBCCategoryDataset(dbConnection);
try {
    dataset1.executeQuery("SELECT top 25 DateTime,Reading FROM SPC_DATA 
        where Machine = 1 and Channel = 1 order by DateTime desc");
    dataset2.executeQuery("SELECT top 25 DateTime,Reading FROM SPC_DATA 
        where Machine = 1 and Channel = 2 order by DateTime desc");
    dataset3.executeQuery("SELECT top 25 DateTime,Reading FROM SPC_DATA 
        where Machine = 1 and Channel = 3 order by DateTime desc");

DefaultCategoryDataset dcd = new DefaultCategoryDataset();

    for (int i = 0; i < dataset1.getColumnCount(); i++) {

    dcd.addValue(dataset1.getValue(dataset1.getRowKey(0), dataset1.getColumnKey(i)),
                    dataset1.getRowKey(0), dataset1.getColumnKey(i));
    dcd.addValue(dataset2.getValue(dataset2.getRowKey(0), dataset2.getColumnKey(i)),
                    dataset2.getRowKey(0), dataset2.getColumnKey(i));
    dcd.addValue(dataset3.getValue(dataset3.getRowKey(0), dataset3.getColumnKey(i)),
                        dataset3.getRowKey(0), dataset3.getColumnKey(i));
    }

JFreeChart chart = ChartFactory.createLineChart("x vs y", "x", "y", dcd,                    
             PlotOrientation.VERTICAL, false, true,false);
chart.setBorderVisible(true);

final LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
      renderer1.setBaseShapesVisible(true);
      renderer1.setBaseShapesFilled(true);
      renderer1.setSeriesStroke(0, new BasicStroke(2.0f));
    Shape circle = new Ellipse2D.Double(-3, -3, 6, 6);
        renderer1.setSeriesShape(0, circle);

final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer();
      renderer2.setBaseShapesVisible(true);
      renderer2.setBaseShapesFilled(true);
      renderer2.setSeriesStroke(0, new BasicStroke(2.0f));
    Shape circle2 = new Ellipse2D.Double(0,0,5,5);
        renderer2.setSeriesShape(0, circle2);

final LineAndShapeRenderer renderer3 = new LineAndShapeRenderer();
      renderer3.setBaseShapesVisible(true);
      renderer3.setBaseShapesFilled(true);
      renderer.setSeriesStroke(0, new BasicStroke(2.0f));
    Shape circle3 = new Ellipse2D.Double(0,0,3,3);
        renderer3.setSeriesShape(0, circle3);

final CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setDataset(0,dataset1);
plot.setRenderer(0, renderer1);
plot.setDataset(1,dataset2);
plot.setRenderer(1, renderer2);
plot.setDataset(2,dataset3);
plot.setRenderer(2, renderer3);

renderer1.setSeriesPaint(0, Color.decode("#0066CC"));
renderer2.setSeriesPaint(1, Color.GREEN);
renderer3.setSeriesPaint(2, Color.WHITE);

if (chart != null) {
        int width = 500;
        int height = 300;
        response.setContentType("image/jpeg");
        OutputStream out = response.getOutputStream();
        ChartUtilities.writeChartAsJPEG(out, chart, width, height);
        }
    }
        catch (SQLException e) {
        System.err.println(e.getMessage());
        }
    }
public void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
    }
}

我通过这样的设置解决了这个问题

renderer1.setSeriesPaint(0, Color.decode("#0066CC"));
renderer2.setSeriesPaint(0, Color.GREEN);
renderer3.setSeriesPaint(0, Color.WHITE);

你可以详细说明指数之间的差异。实际上我不明白。如果有人解释一下就好了。您的原始代码在第二个渲染器、第二个渲染器和第三个渲染器中为不存在的系列索引指定了绘画。我想运行您的代码,但由于有许多不相关的类,我没有成功。请至少下次提供。