- - PR -
JFreeChartで画像を表示したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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