- - PR -
JFreeChartでグラフを重ねる
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-20 21:37
JFreechartを使用して積み上げグラフと同時に線グラフを出したいと思っております。
積み上げグラフのみは出せたのですが、その上に線グラフを出すことができず 困っております。 線グラフのデータはコメントアウトAの部分です。 教えていただけないでしょうか。 ============================================================================ package common; 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.Legend; 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.StandardCategoryLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.CategoryItemRenderer; import org.jfree.data.CategoryDataset; import org.jfree.data.DatasetUtilities; import org.jfree.ui.TextAnchor; public class test4 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.VERTICAL ,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_RIGHT); domainAxis.setCategoryMargin(0. // 積み上げグラフの説明文の位置設定 obj_chart.getLegend().setAnchor(Legend.EAST); // グリッド線の色を設定 plot.setDomainGridlinePaint(Color.black); plot.setRangeGridlinePaint(Color.black); // グラフバー内に数字を出力する方法 renderer.setLabelGenerator(new StandardCategoryLabelGenerator()); 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; } } ============================================================================ [ メッセージ編集済み 編集者: 未記入 編集日時 2004-08-21 01:38 ] | ||||
|
投稿日時: 2004-08-23 11:39
JFreeChart 学習中の身です。
とりあえず線は出るようになりました。 import の必要なクラスがありますので、 適宜追加修正して下さい。 ============================================================================ // trueにするとsetRangeの値を自動で設定する。 obj_rangeAxis.setAutoRange(false) ; obj_rangeAxis.setRange(0.0, 100.0) ; // 以下4行追加 CategoryItemRenderer renderer1 = new LineAndShapeRenderer() ; plot.setDataset(1, dataset1) ; plot.setRenderer(1, renderer1) ; plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD) ; return obj_chart ; } } ============================================================================ 追加する位置が上記で良いのかどうか等、 何が正解かまでは私も理解出来ていませんので、 御参考程度にでもなりましたら…。 | ||||
|
投稿日時: 2004-08-23 21:16
ありがとうございました。
本当に助かりました!HPでも調べるものがなさ過ぎるんで、、、 お聞きしたいのですが、この方法だと、棒線グラフの色が積み上げグラフの後に 設定されるため固定色になりません。 先に棒グラフを書く方法を試してみましたが、うまい具合に積み上げグラフがでませんでした。 ご存知でしたら教えていただけないでしょうか? | ||||
|
投稿日時: 2004-08-24 00:13
お役に立てたようで良かったです。
ホントに情報が少ないですよね…。 英語のドキュメントとサンプルコードでチマチマやってますが、 時間が幾らあっても足りないと言うか…。 さて、線の色を変更されたい、ということですよね? 勉強不足なもので、今回は良い答えを持ち合わせておりません。 私も今、JFreeChart に取り組んでいる最中ですので、 何か分かったらお知らせしたいと思います。 いずれにしても、色々と試してみるしかなさそうですね。 | ||||
|
投稿日時: 2004-08-24 11:55
未記入さん、はじめまして
昨年、JFreeChart でアプリを作ったのですが、もう詳しいところは忘れてしまいました 線に色やスタイルを設定するには以下のようにしています。 java.awt.XXX をimport する必要があります。
| ||||
1
