- - PR -
JFreeChartの凡例表示について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-28 21:49
下記クラスを実行したところ、Exceptingエラーが発生しました。
java.lang.NullPointerException at BarChartSample1.main(BarChartSample1.java:98) Exception in thread "main" どうも、凡例の方向を設定するところからエラーが出ているようですが、 分かる方がいましたらご教授いただけますでしょうか? 【chart.getLegend();】はNULLになっているようですが。 ------------------------------------------------------------ package jfreechart; import java.awt.BasicStroke; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Paint; import java.io.File; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.Legend; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.DefaultCategoryDataset; /** * 棒グラフのサンプル */ public class BarChartSample1 { public static void main(String[] args) { // データセットの作成 String series1 = "First"; String series2 = "Second"; String series3 = "Third"; // カテゴリーの設定 String category1 = "Category 1"; String category2 = "Category 2"; String category3 = "Category 3"; DefaultCategoryDataset dataset = new DefaultCategoryDataset (); dataset.addValue(1.0, series1, category1); dataset.addValue(4.0, series1, category2); dataset.addValue(5.0, series1, category3); dataset.addValue(5.0, series2, category1); dataset.addValue(7.0, series2, category2); dataset.addValue(7.0, series2, category3); dataset.addValue(6.0, series3, category1); dataset.addValue(8.0, series3, category2); dataset.addValue(8.0, series3, category3); // JFreeChartオブジェクトの生成 JFreeChart chart = ChartFactory.createBarChart("Sample Bart Chart1", "Category", "Value", dataset, PlotOrientation.VERTICAL, true, true, false); // JFreeChartのカスタマイズ // グラフ全体の背景色の設定 Paint bgPaint = chart.getBackgroundPaint(); chart.setBackgroundPaint(Color.WHITE); // グラフ全体の境界線の設定 chart.setBorderVisible( true); chart.setBorderPaint( Color.BLACK); chart.setBorderStroke( new BasicStroke(5)); // 描画領域の設定 CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setRangeGridlinePaint(Color.BLUE); plot.setDomainGridlinesVisible(false); // 横軸の設定 CategoryAxis axis = plot.getDomainAxis(); axis.setLowerMargin(0.03); axis.setUpperMargin(0.03); axis.setCategoryLabelPositions(CategoryLabelPositions .createUpRotationLabelPositions(Math.PI / 6.0)); // 縦軸の設定 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits (NumberAxis.createIntegerTickUnits()); // 凡例の設定 Legend legend = chart.getLegend(); legend.setAnchor( Legend.EAST); // Rendererの設定 BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setItemMargin(0.30); renderer.setDrawBarOutline(false); // バーのカラー設定 GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64)); GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f, 0.0f, new Color(0, 64, 0)); GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f, 0.0f, new Color(64, 0, 0)); renderer.setSeriesPaint(0, gp0); renderer.setSeriesPaint(1, gp1); renderer.setSeriesPaint(2, gp2); // PNGに出力 File outputFile = new File("./output/SampleBarChart1.png"); try { ChartUtilities.saveChartAsPNG(outputFile, chart, 500, 500); } catch (IOException ioEx) { ioEx.printStackTrace(); } } } |
|
投稿日時: 2006-06-29 09:24
手元のJFreeChart(Ver.1.0.1)には Legendクラスがありません。
バージョンは何をお使いでしょうか? # ChangelLog 及び CHANGELOG.txt によると # Ver.1.0.0 の開発過程で無くなってしまったようです。 # Legend → OldLegendに改名(1.0.0-rc1, 2005/03/28) →廃止(2005/11/24) |
|
投稿日時: 2006-06-29 09:48
ご回答ありがとうございます。
バージョンは1.0.0のようです。 jfreechart-1.0.0-pre2.jar jcommon-1.0.0-pre2.jar クラスがなければエラーが出るはずですが、 バージョンアップして試してみます。 |
|
投稿日時: 2006-06-29 10:48
バージョンアップしても、ダウンしても、うまくいきません。
ちなみに、Ver.1.0.1の凡例設定はどのように行われますでしょうか? よろしくお願いいたします。 |
|
投稿日時: 2006-06-30 10:20
自力解決
・・・ chart.setLegend(new StandardLegend()); //今回の追加 ・・・ chart.getLegend().setAnchor(Legend.EAST); ・・・ |
1