- - PR -
JFreeChartで積み上げグラフのグラフ間に先をひきたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-09-21 11:15
積み上げグラフでグラフ間に項目単位の線をひきたいのですが。
方法がわからなかったので、積み上げグラフに線グラフをひきましたが、 積み上げグラフの上に表示されてしまいます。 なにか良い方法はないものでしょうか? ============================ package chart; import java.io.*; import javax.servlet.*; 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; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.chart.renderer.category.LineAndShapeRenderer; public class ChartServlet5 extends HttpServlet { public void drawChart(HttpServletRequest request, HttpServletResponse response, double[][] dbl) throws ServletException, java.io.IOException { processRequest(request, response, dbl); } protected void processRequest(HttpServletRequest req, HttpServletResponse res, double[][] dbl) { 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(); } //double dbl = Double.valueOf(req.getParameterValues("data")[0]).doubleValue(); // 棒グラフのJFreeChartを作成 JFreeChart chart = createChart(dbl); // コンテンツタイプを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 (double[][] dbl) { // データ final double[][] dbl_data = new double[][]{ {1, 4, 3, 5, 0} ,{5, 7, 6, 8, 0} ,{4, 3, 2, 3, 0} ,{0, 7, 6, 8, 0} ,{1, 4, 3, 5, 0} ,{5, 7, 6, 8, 0} ,{4, 3, 2, 3, 0} ,{5, 7, 6, 10, 0} }; // 横軸 final String[] str_data_x = new String[]{ "15歳" ,"20歳" ,"25歳" ,"30歳" ,"35歳" ,"40歳" ,"45歳" ,"50歳" ,"55歳" }; // 縦軸 final String[] str_data_y = new String[]{ "Q1" ,"Q2" ,"Q3" ,"Q4" ,"Q5" ,"Q6" ,"Q7" ,"Q8" ,"Q9" ,"Q10" ,"Q11" ,"Q12" ,"Q13" }; // JFreeChartへのグラフデータ格納型CategoryDatasetのオブジェクトを作成 final CategoryDataset obj_dataset = DatasetUtilities.createCategoryDataset( str_data_y ,str_data_x ,dbl ); final JFreeChart obj_chart = ChartFactory.createStackedBarChart3D( "" ,"" ,"" ,obj_dataset ,PlotOrientation.HORIZONTAL ,true ,true ,true ); // ------------------------------ // コメントアウトA // このようなグラフを追加したい DefaultCategoryDataset dataset1 = new DefaultCategoryDataset(); dataset1.addValue(1.0, "", "15歳"); dataset1.addValue(2.0, "", "20歳"); dataset1.addValue(3.0, "", "25歳"); dataset1.addValue(4.0, "", "30歳"); dataset1.addValue(5.0, "", "35歳"); dataset1.addValue(4.0, "", "40歳"); dataset1.addValue(3.0, "", "45歳"); dataset1.addValue(2.0, "", "50歳"); dataset1.addValue(1.0, "", "55歳"); // ----------------------------- // 背景色の設定(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.5); // 積み上げグラフの説明文の位置設定 //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, 65.0); CategoryItemRenderer renderer1 = new LineAndShapeRenderer() ; plot.setDataset(1, dataset1) ; plot.setRenderer(1, renderer1) ; plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD) ; return obj_chart; } } |
1