- PR -

【jFreeChart】基準線の表示

1
投稿者投稿内容
にこにこ
会議室デビュー日: 2005/04/14
投稿数: 3
投稿日時: 2005-04-14 13:56
jFreeChartを使用してグラフの作成を行っているのですが、
折線グラフの表示を行い、軸のある値を基準値とし、グラフ内に
線(Gridline?)を表示したいのですが、方法がよくわかりません。
なんとなく、drawRangeGridlineというメソッドが該当しそうな
気がするのですが、使用方法がまったく理解できませんでした。
どなたかご教授お願いできないでしょうか。


以下は、イメージ)
200 |    |    |
  |  /\|    |
100 |-----------------|基準値として
  | /   |\/  |
0  |    |    |
−−−−−−−−−−−−−
      縦軸にも基準線を表示したい

にこにこ
会議室デビュー日: 2005/04/14
投稿数: 3
投稿日時: 2005-04-18 09:34
自己解決しました。

なんとかサンプル等を眺めながら自分のやりたかったことができました。
(初めてJavaを体験している中での調査だったので勘所がなかなか働きませんでした。)

当初はLineChartを使用して任意の縦、横軸線の色を変更して基準となる線を
ビジュアル的に表現しようとしていたのですが、使用するChartの種類を
TimeSeriesChartに変更し、Markerを引くことにより実現できました。

LineChartでは同様のことが実現可能なのかはわかっていませんが。

以上、お騒がせいたしました。
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2005-04-18 10:59
具体的にMarkerをどのように使用して基準線を引いたのですか?
ちょうど私も基準線の表示で止まっているので・・・。
私は基準線の間隔もいろいろ変えたいと思っているのですが。

よろしければソースなどを貼り付けていただけませんでしょうか?
よろしくお願いします。
にこにこ
会議室デビュー日: 2005/04/14
投稿数: 3
投稿日時: 2005-04-19 09:56
Java初心者のコードで見づらいと思いますが、以下のコードで軸線の描画ができました。
(コードは描画を行っている部分を抜粋したものです)

コード:
XYDataset data1 = createDataset1();
StandardXYItemRenderer renderer1
    = new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES_AND_LINES);
// シェイプを非表示
renderer1.setPlotShapes(false);
// 文字をグラフ内に描写
renderer1.setLabelGenerator(new StandardXYLabelGenerator());
// 文字表示有効と表示位置指定
renderer1.setItemLabelsVisible(true);
renderer1.setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.TOP_CENTER)); 
renderer1.setNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.BOTTOM_CENTER)); 

DateAxis domainAxis = new DateAxis("日付");
domainAxis.setDateFormatOverride(new SimpleDateFormat("MM/dd"));
ValueAxis rangeAxis = new NumberAxis("在庫");

XYPlot plot = new XYPlot(data1, domainAxis, rangeAxis, renderer1);
// 基準在庫ラインの描画
Marker marker = new ValueMarker(30);
marker.setPaint(Color.blue);
plot.addRangeMarker(marker);

// 当日ラインの描画
Day today = new Day();
marker = new ValueMarker(today.getFirstMillisecond());
marker.setPaint(Color.green);
plot.addDomainMarker(marker);

JFreeChart chart = new JFreeChart("在庫状況確認", plot);



以上のラインの描画という部分で縦軸、横軸にあわせた軸線を色指定し描画しています。
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2005-04-19 15:18
にこにこ 様

勝手なおねがいにもかかわらず、
わざわざコードを貼り付けていただきありがとうございました。

コードを参考にしてMarkerを使用してみたところ
基準線の表示ができることを確認しました。

ただ、私の場合、目盛り間隔を自由に設定するというものだったので
いろいろやっているうちに
TickUnitsとNumberTickUnitを使用すればいいことが分かりました。
以下に簡単なソースを書いておきます。

以上です。どうも。


コード:

import java.awt.*;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.axis.*;
import org.jfree.ui.*;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;

public class GridChart {
    /**
     * BarChartの作成と使用.
     */
    public void workBarChart() {
	// まずBarChartを作成する.
	JFreeChart barChart = getBarChart();


	// 作成したBarChartでChartFrameを作成.
	ChartFrame cFrame = new ChartFrame ("barChartFrame", barChart);
        RefineryUtilities.centerFrameOnScreen(cFrame);
	cFrame.setSize(500, 500);
	cFrame.setVisible(true);
	cFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    /**
     * JFreeChartオブジェクトの作成と操作
     */
    public JFreeChart getBarChart() {
		// 棒グラフのデータ
			double[][] data = new double[][]
		{{300, 100 },
		 {1500, 200 },
		 {200, 150}};
		// カラム
		String[] columns = new String[] {
			 "横1"
			 ,"横2"
		};
		String[] rows = new String[] {
			"AAA"
			,"BBB"
			,"CCC"
		};
			// CategoryDatasetオブジェクトの作成
		CategoryDataset cData = DatasetUtilities.createCategoryDataset(rows, columns, data);
		// CategoryDatasetをデータにしてJFreeChartを作成
		JFreeChart barChart = ChartFactory.createStackedBarChart(
								   "",	
								   "",
								   "縦軸",
								   cData, PlotOrientation.VERTICAL,
								   false, false, false);
		//項目表示
		StandardLegend legend = new StandardLegend();
		legend.setAnchor(Legend.EAST);
		legend.setBackgroundPaint(ChartColor.LIGHT_GRAY);
		barChart.setLegend(legend);
		//背景色の設定
		barChart.setBackgroundPaint(ChartColor.LIGHT_GRAY);
		CategoryPlot plot = barChart.getCategoryPlot();
		plot.setBackgroundPaint(ChartColor.LIGHT_GRAY);
		//バーの色
		CategoryItemRenderer renderer = barChart.getCategoryPlot().getRenderer();
		renderer.setSeriesPaint(0, ChartColor.VERY_DARK_MAGENTA);
		renderer.setSeriesPaint(1, ChartColor.ORANGE);
		renderer.setSeriesPaint(2, ChartColor.LIGHT_BLUE);
		//縦軸の値の設定
		ValueAxis valueAxis = barChart.getCategoryPlot().getRangeAxis();
		valueAxis.setAutoRange(false);
		valueAxis.setRange(0, 3000.0);
		valueAxis.setVisible(true);
		//目盛り線の表示
		plot.setRangeGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.GRAY);
		//目盛り間隔の設定
		TickUnits tickUnits = new TickUnits();
		TickUnit unit = new NumberTickUnit(1000);
		tickUnits.add(unit);		
		valueAxis.setStandardTickUnits(tickUnits);





		return barChart;
    }


    public static void main (String args[]) {
	GridChart sbc = new GridChart();
	sbc.workBarChart();
    }
}





1

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