- PR -

JFreeChartで画像を表示したい

1
投稿者投稿内容
アイビー
会議室デビュー日: 2005/09/20
投稿数: 3
投稿日時: 2005-09-20 19:28
はじめまして
タマさんの「JFreeChartでグラフを重ねる」のソースを拝借してプログラムしています。
横向きの積み上げグラフを表示しています。
各項目に数値の代わりにアイコンのような画像を表示したいです。
JFreeChartにそのような機能はあるのでしょうか?
どなたかご教示ください。

またタマさんが使っているStandartdLegendというクラス(インターフェイス?)が
どこにあるかも知りたいです。

どうぞよろしくお願いいたします。

ソース(タマさんのものとほとんど変わりません)
-----
package chart;

import java.io.*;
import javax.servlet.http.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.axis.*;
import org.jfree.ui.*;
import org.jfree.data.*;

import java.awt.Color;

import javax.servlet.http.HttpServlet;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendRenderingOrder;
//import org.jfree.chart.StandardLegend;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.TextAnchor;

public class ChartServlet3 extends HttpServlet {

protected void doGet(HttpServletRequest req, HttpServletResponse res) {
int width = 640;
int height = 640;

try {
// 縦横サイズの指定
width = Integer.parseInt(req.getParameterValues ("width")[0]);
height = Integer.parseInt(req.getParameterValues ("height")[0]);
} catch (Exception e) {
e.printStackTrace();
}

// 棒グラフのJFreeChartを作成
JFreeChart chart = createChart();
// コンテンツタイプをpngにする.
res.setContentType("image/png");
OutputStream outputStream;
System.err.println("write png width = " + width + " / height = " + height);
try {
outputStream = new BufferedOutputStream(res.getOutputStream());
// JFreeChartをPNGとして出力
ChartUtilities.writeChartAsPNG(outputStream, chart, width, height);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 棒グラフのJFreeChartを作成する.
*/
private JFreeChart createChart () {
// データ
final double[][] dbl_data = new double[][]{
{1.0, 4.0, 3.0, 5.0, 0}
,{5.0, 7.0, 6.0, 8.0, 0}
,{4.0, 3.0, 2.0, 3.0, 0}
,{0.0, 7.0, 6.0, 8.0, 0}
,{1.0, 4.0, 3.0, 5.0, 0}
,{5.0, 7.0, 6.0, 8.0, 0}
,{4.0, 3.0, 2.0, 3.0, 0}
,{5.0, 7.0, 6.0, 10.0, 0}

};

// 横軸
final String[] str_data_x = new String[]{
"10/11"
,"10/12"
,"10/13"
,"10/14"
,""
};

// 縦軸
final String[] str_data_y = new String[]{
"aaa"
,"bbb"
,"故障A"
,"故障B"
,"故障C"
,"故障D"
,"故障E"
,"故障F"
};

// JFreeChartへのグラフデータ格納型CategoryDatasetのオブジェクトを作成
final CategoryDataset obj_dataset = DatasetUtilities.createCategoryDataset(
str_data_y
,str_data_x
,dbl_data
);


final JFreeChart obj_chart = ChartFactory.createStackedBarChart3D(
""
,""
,"%"
,obj_dataset
,PlotOrientation.HORIZONTAL
,true
,true
,true
);

// ------------------------------
// コメントアウトA
// このようなグラフを追加したい
//DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
//dataset1.addValue(1.0, "S1", "10/11");
//dataset1.addValue(4.0, "S1", "10/12");
//dataset1.addValue(3.0, "S1", "10/13");
//dataset1.addValue(5.0, "S1", "10/15");
//dataset1.addValue(5.0, "S1", "");
// -----------------------------


// 背景色の設定(GREEN)
// chart.setBackgroundPaint(new Color(0xCC, 0xFF, 0xCC));
// 背景色の設定(BLUE)
//obj_chart.setBackgroundPaint(new Color(222, 222, 255));
obj_chart.setBackgroundPaint(new Color(255, 255, 255));

//final StandardLegend legend = (StandardLegend) obj_chart.getLegend();
//legend.setRenderingOrder(LegendRenderingOrder.REVERSE);
final CategoryPlot plot = (CategoryPlot) obj_chart.getPlot();
final CategoryItemRenderer renderer = plot.getRenderer();

CategoryAxis domainAxis = plot.getDomainAxis();
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
domainAxis.setCategoryMargin(0.2);

// 積み上げグラフの説明文の位置設定
//obj_chart.getLegend().setAnchor(Legend.EAST);
// グリッド線の色を設定
plot.setDomainGridlinePaint(Color.black);
plot.setRangeGridlinePaint(Color.black);

// グラフバー内に数字を出力する方法
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelsVisible(true);
renderer.setPositiveItemLabelPosition(
new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER)
);
renderer.setNegativeItemLabelPosition(
new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER)
);


final ValueAxis obj_rangeAxis = plot.getRangeAxis();

// trueにするとsetRangeの値を自動で設定する。
obj_rangeAxis.setAutoRange(false);
obj_rangeAxis.setRange(0.0, 100.0);

return obj_chart;

}

}

[ メッセージ編集済み 編集者: アイビー 編集日時 2005-09-20 20:20 ]
1

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