import java.awt.Color; import java.io.*; import javax.swing.*; import java.util.*; import org.jfree.chart.*; import org.jfree.chart.axis.*; import org.jfree.chart.labels.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.labels.StandardCategoryLabelGenerator; import org.jfree.chart.plot.*; import org.jfree.chart.renderer.*; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.data.*; import org.jfree.data.category.*; import org.jfree.data.general.*; import org.jfree.ui.*; // ************************************************************************************************* // グラフ作成クラス public class CreateGraph { // グラフ名称 String[] Graph_Name; // 項目名称 String[] Item_Name; // 各グラフ各項目の値 double[][] Item_Value; // グラフ上部コメント String Graph_UpperComment; // グラフ左部コメント String Graph_LeftComment; // ファイル出力先のパス String File_Path; // グラフの画像サイズ int[] Graph_Size; // 背景色 int[] Graph_Background; // ************************************************************************************************* // コンストラクタ public CreateGraph(String[] Graph_Name_Arg, String[] Item_Name_Arg, double[][] Item_Value_Arg, String Graph_UpperComment_Arg, String Graph_LeftComment_Arg, String File_Path_Arg, int[] Graph_Size_Arg, int[] Graph_Background_Arg) { // グラフ名称 Graph_Name = Graph_Name_Arg; // 項目名称 Item_Name = Item_Name_Arg; // 各グラフ各項目の値 Item_Value = Item_Value_Arg; // グラフ上部コメント Graph_UpperComment = Graph_UpperComment_Arg; // グラフ左部コメント Graph_LeftComment = Graph_LeftComment_Arg; // ファイル出力先のパス File_Path = File_Path_Arg; // グラフの画像サイズ Graph_Size = Graph_Size_Arg; // 背景色 Graph_Background = Graph_Background_Arg; } // ************************************************************************************************* // チャート出力・表示メソッド public void workChart () { // チャートを生成する JFreeChart chart = getChart(); // チャートの詳細設定 configChart(chart); // ファイル名に使う可変文字列宣言 StringBuffer sb = new StringBuffer(); // システム時間を取得 long time = System.currentTimeMillis(); // パス・システム時間・拡張子を追記 sb.append(File_Path).append(time).append(".png"); // File関数に渡すStringに変換 String filename = new String(sb.toString()); // 出力ファイル名指定(JPGだと圧縮かかって文字が滲む) File outfile = new File(filename); // 画像出力 try { // PNG画像出力 ChartUtilities.saveChartAsPNG (outfile, chart, Graph_Size[0], Graph_Size[1]); // エラーキャッチ } catch(IOException e) { // エラーキャッチ e.printStackTrace(); } } // ************************************************************************************************* // チャート生成メソッド public JFreeChart getChart () { // オブジェクト生成 CategoryDataset obj_dataset = DatasetUtilities.createCategoryDataset(Item_Name, Graph_Name, Item_Value); // 生成したオブジェクトを基にして3D積み重ね棒グラフ作成 JFreeChart obj_chart = ChartFactory.createStackedBarChart3D(Graph_UpperComment, "", Graph_LeftComment, obj_dataset, PlotOrientation.VERTICAL, true, true, true); // オブジェクトを返す return obj_chart; } // ************************************************************************************************* // チャート詳細設定メソッド public void configChart (JFreeChart chart) { // オブジェクト生成 CategoryPlot cPlot = chart.getCategoryPlot(); // 背景色 chart.setBackgroundPaint(new Color(Graph_Background[0], Graph_Background[1], Graph_Background[2])); // アンチエイリアス処理(trueでアンチエイリアスをかける) chart.setAntiAlias(false); // オブジェクト生成 CategoryAxis domainAxis = cPlot.getDomainAxis(); // 各グラフの間隔の総和を設定(横軸の総和を1と考える) domainAxis.setCategoryMargin(0.4); // 縦グラフならば縦軸と一番左側のマージンを設定 domainAxis.setLowerMargin(0.1); // 縦グラフならば縦軸と一番右側のマージンを設定 domainAxis.setUpperMargin(0.1); // オブジェクト生成 ValueAxis valueAxis = cPlot.getRangeAxis(); // 軸のレンジ自動調整をしない valueAxis.setAutoRange(false); // 開始値、終了値(setAutoRangeがfalseの場合にのみ記述) valueAxis.setRange(0.0, 100.0); // オブジェクト生成 CategoryItemRenderer renderer = cPlot.getRenderer(); // 文字をグラフ内に描写 renderer.setLabelGenerator(new StandardCategoryLabelGenerator()); // falseで文字表示しない renderer.setItemLabelsVisible(true); renderer.setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER)); renderer.setNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER)); // 一つ目の要素の色を設定 renderer.setSeriesPaint(0, Color.green); // 二つ目の要素の色を設定 renderer.setSeriesPaint(1, Color.red); // グラフの本数を取得 int Item_TotalNum = Item_Name.length; // グラフの本数分だけ繰り返す for (int i = 0; i < Item_TotalNum; i++) { // 要素の外枠の色を設定 renderer.setSeriesOutlinePaint(i, Color.gray); } } // ************************************************************************************************* // メインメソッド public static void main(String[] args) { // グラフ名称(左から順に) String[] Graph_Name = new String[]{"Category 1", "Category 2", "Category 3"}; // 項目名称(一つのグラフの中に含める区分) String[] Item_Name = new String[]{"Available", "Not Available"}; // 各グラフ各項目の値を下から順に // {グラフ1の項目1の値,グラフ2の項目1の値,グラフ3の項目1の値},{グラフ1の項目2の値,グラフ2の項目2の値,グラフ3の項目2の値},・・・ double[][] Item_Value = new double[][] { {86.9, 20.4, 48.7}, {13.1, 79.6, 51.3} }; // グラフ上部コメント String Graph_UpperComment = "Graph View"; // グラフ左部コメント String Graph_LeftComment = "Percentage (%)"; // ファイル出力先のパス String File_Path = "./"; // グラフの画像サイズ(横、縦で) int[] Graph_Size = new int[]{600, 400}; // 背景色(RGBで) int[] Graph_Background = new int[]{204, 255, 204}; // インスタンス生成 CreateGraph cg = new CreateGraph(Graph_Name, Item_Name, Item_Value, Graph_UpperComment, Graph_LeftComment, File_Path, Graph_Size, Graph_Background); // 画像生成実行 cg.workChart(); } }