- PR -

JFreeChartの凡例表示について

1
投稿者投稿内容
kaokun
会議室デビュー日: 2006/06/28
投稿数: 8
投稿日時: 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();
}
}
}


ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 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)
kaokun
会議室デビュー日: 2006/06/28
投稿数: 8
投稿日時: 2006-06-29 09:48
ご回答ありがとうございます。

バージョンは1.0.0のようです。

jfreechart-1.0.0-pre2.jar
jcommon-1.0.0-pre2.jar

クラスがなければエラーが出るはずですが、
バージョンアップして試してみます。
kaokun
会議室デビュー日: 2006/06/28
投稿数: 8
投稿日時: 2006-06-29 10:48
バージョンアップしても、ダウンしても、うまくいきません。

ちなみに、Ver.1.0.1の凡例設定はどのように行われますでしょうか?

よろしくお願いいたします。
kaokun
会議室デビュー日: 2006/06/28
投稿数: 8
投稿日時: 2006-06-30 10:20
自力解決

・・・
chart.setLegend(new StandardLegend()); //今回の追加
・・・
chart.getLegend().setAnchor(Legend.EAST);
・・・
1

スキルアップ/キャリアアップ(JOB@IT)