- PR -

JFreeChartで積み上げグラフのグラフ間に先をひきたい

1
投稿者投稿内容
アイビー
会議室デビュー日: 2005/09/20
投稿数: 3
投稿日時: 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

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