目次 ⇒ JFreeChartサンプル
package jp.avaj.lib.chart;
import java.io.IOException;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
■ JFreeChart-X軸が共通な二つのグラフを重ねて表示する
・二種のデータを同時に表示したいときがある.この例では株価と出来高を同時に表示すれば、動きがよくわかる.
・やり方としては、まず一つのグラフでJFreeChartを作成する.
・そのJFreeChartに対して、もう一つのグラフを追加する.
・注、このような手順は気に入らないが、このやり方でないとできないようである(⇒試してみた).ネットにあるサンプルもこのようなやり方をしている.
・(2)出来高のデータを作成し、XYPlotに追加する.
・(3)出来高の軸を作成して出来高のデータと結びつける.
・注、なぜかdataSetIdとaxisIndexは同じ値でなければ動作しない.不思議なAPIだ(笑).2でもよい.
・(4)は、どちらを生かしても、両方コメントにしても、なぜか軸は右側に表示される.
・仕方がないことであろうが、複数のグラフが重なるとき、下に描かれたグラフが潰されて見えにくくなることがある.
*/
public class Chart18_08 {
//
public static void main(String[] args) throws IOException {
//
// 先にPlot(XYPlot)を作成しておく
CategoryPlot plot = new CategoryPlot();
// xyPlotに追加する
{
CategoryDataset dataset0 = createDataset0();
NumberAxis yAxis = new NumberAxis("Sales");
CategoryAxis xAxis = new CategoryAxis("BRANCH");
LineAndShapeRenderer render0 = new LineAndShapeRenderer();
plot.setRangeAxis(yAxis);
plot.setDomainAxis(xAxis);
plot.setRenderer(render0);
plot.setDataset(dataset0);
}
//
JFreeChart jfreeChart = new JFreeChart("SalesChart",(Plot)plot); // (1)
//
// もう一つのグラフををxyPlotに追加する
{
CategoryDataset dataset1 = createDataset1();
BarRenderer renderer1 = new BarRenderer();
ValueAxis yAxis = new NumberAxis("Sales");
final int dataSetId = 1;
plot.setDataset(dataSetId,dataset1); // (2)
final int axisIndex = 1;
plot.mapDatasetToRangeAxis(dataSetId,axisIndex); // (2)
plot.setRangeAxis(dataSetId,yAxis); // (3)
plot.setRenderer(dataSetId,renderer1);
}
//
ChartFrame cFrame = new ChartFrame("TimeSeriesChartFrame",(JFreeChart)jfreeChart);
cFrame.pack();
cFrame.setVisible(true);
}
static final String BRAND0 = "Brand0";
static final String BRAND1 = "Brand1";
static final String BRAND2 = "Brand2";
static final String BRAND3 = "Brand3";
static final String BRANCH0 = "BRANCH0";
static final String BRANCH1 = "BRANCH1";
static final String BRANCH2 = "BRANCH2";
static final String BRANCH3 = "BRANCH3";
static final String BRANCH4 = "BRANCH4";
static final String BRANCH5 = "BRANCH5";
static final String BRANCH6 = "BRANCH6";
static final String BRANCH7 = "BRANCH7";
private static CategoryDataset createDataset0() {
DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
localDefaultCategoryDataset.addValue(1.0D,BRAND0,BRANCH0);
localDefaultCategoryDataset.addValue(4.0D,BRAND0,BRANCH1);
localDefaultCategoryDataset.addValue(3.0D,BRAND0,BRANCH2);
localDefaultCategoryDataset.addValue(5.0D,BRAND0,BRANCH3);
localDefaultCategoryDataset.addValue(5.0D,BRAND0,BRANCH4);
localDefaultCategoryDataset.addValue(7.0D,BRAND0,BRANCH5);
localDefaultCategoryDataset.addValue(7.0D,BRAND0,BRANCH6);
localDefaultCategoryDataset.addValue(8.0D,BRAND0,BRANCH7);
localDefaultCategoryDataset.addValue(5.0D,BRAND1,BRANCH0);
localDefaultCategoryDataset.addValue(7.0D,BRAND1,BRANCH1);
localDefaultCategoryDataset.addValue(6.0D,BRAND1,BRANCH2);
localDefaultCategoryDataset.addValue(8.0D,BRAND1,BRANCH3);
localDefaultCategoryDataset.addValue(4.0D,BRAND1,BRANCH4);
localDefaultCategoryDataset.addValue(4.0D,BRAND1,BRANCH5);
localDefaultCategoryDataset.addValue(2.0D,BRAND1,BRANCH6);
localDefaultCategoryDataset.addValue(1.0D,BRAND1,BRANCH7);
return localDefaultCategoryDataset;
}
private static CategoryDataset createDataset1() {
DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
localDefaultCategoryDataset.addValue(11.0D,BRAND2,BRANCH0);
localDefaultCategoryDataset.addValue(14.0D,BRAND2,BRANCH1);
localDefaultCategoryDataset.addValue(13.0D,BRAND2,BRANCH2);
localDefaultCategoryDataset.addValue(15.0D,BRAND2,BRANCH3);
localDefaultCategoryDataset.addValue(15.0D,BRAND2,BRANCH4);
localDefaultCategoryDataset.addValue(17.0D,BRAND2,BRANCH5);
localDefaultCategoryDataset.addValue(17.0D,BRAND2,BRANCH6);
localDefaultCategoryDataset.addValue(18.0D,BRAND2,BRANCH7);
localDefaultCategoryDataset.addValue(15.0D,BRAND3,BRANCH0);
localDefaultCategoryDataset.addValue(17.0D,BRAND3,BRANCH1);
localDefaultCategoryDataset.addValue(16.0D,BRAND3,BRANCH2);
localDefaultCategoryDataset.addValue(18.0D,BRAND3,BRANCH3);
localDefaultCategoryDataset.addValue(14.0D,BRAND3,BRANCH4);
localDefaultCategoryDataset.addValue(14.0D,BRAND3,BRANCH5);
localDefaultCategoryDataset.addValue(12.0D,BRAND3,BRANCH6);
localDefaultCategoryDataset.addValue(11.0D,BRAND3,BRANCH7);
return localDefaultCategoryDataset;
}
}