2016-10-25 8 views
-1

このコードは、折れ線グラフを使用して3系列のグラフを示しています。私は各シリーズごとに3種類の色を設定しました。しかし、最初の2つのシリーズはシリーズ1に設定した同じ色を示しています。 Series3は私が設定しなかった色を示しています。複数の系列を持つ折れ線カラー問題

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 { 
    } 
} 

答えて

0

私はあなたがインデックスがどのように異なるかについて詳しく説明かもしれません。この

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

のように設定することで問題を解決しました。 – trashgod

+0

実際、私は理解していませんでした。誰かが説明すればいいだろう。 – user3785322

+0

2番目と3番目のレンダラーに存在しないシリーズインデックスのオリジナルコードが指定されたペイントです。 – trashgod

関連する問題