0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JFreeChart-積上げバーチャート-特定データの強調-続き

Posted at

目次 ⇒ JFreeChartサンプル


package jp.avaj.lib.chart;

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.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

import jp.avaj.lib.algo.ArUtil;

/**
■ JFreeChart-積上げバーチャート-特定データの強調-続き

・積上げバーチャートは、合計の変化はよく見ることができる.
・しかし一番下のデータ以外は変化が分かりにくい.これを他のデータの変化も見えるようにしたい.
・Chart08_02では、表示の順番を入れ替える案を提示したが、やり方がえげつなく(私は)不満である.
・本サンプルでは、積上げバーチャートの上に、折れ線グラフを表示することにした.こちらの方がベター.

・本サンプルでは商品Cを取り出した.
・折れ線グラフの商品Cの色が元の色と違っている.
  ・同じ色にすることもできるが、しかし元のバーの商品Cの部分と重なった場合は区別できないので良しとする.
    ・注、この例では重ならない.
・下の凡例の部分に商品Cが二重表示されている⇒ちょっと感じが悪いが、何を強調表示しているか分かるので許す.

 */
public class Chart08_03 {
  // 目次-積上げバーチャート(StackedBarChart)
  A_Chart08 a_Chart08;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データの作成
    DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
    {
      //
      dataSet.addValue(136.5,"商品A","2014");
      dataSet.addValue(206.1,"商品A","2015");
      dataSet.addValue(296.7,"商品A","2016");
      //
      dataSet.addValue( 40.5,"商品B","2014");
      dataSet.addValue(105.7,"商品B","2015");
      dataSet.addValue(199.4,"商品B","2016");
      //
      dataSet.addValue(150.5,"商品C","2014");
      dataSet.addValue(87.5,"商品C","2015");
      dataSet.addValue(40.0,"商品C","2016");
    }
    //
    CategoryAxis catAxis = new CategoryAxis();
    NumberAxis numAxis = new NumberAxis();
    // 積上棒グラフにはStackedBarRendererを使用する
    StackedBarRenderer renderer = new StackedBarRenderer();
    CategoryPlot catPlot = new CategoryPlot(dataSet,catAxis,numAxis,(CategoryItemRenderer)renderer); // (1)
    JFreeChart jfreeChart = new JFreeChart("売上構成の変化",(Plot)catPlot);
    //
    ChartFrame cFrame = new ChartFrame("売上構成の変化",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);

    // 特定商品(商品C)の売り上げを抽出⇒折れ線グラフを追加する
    {
      // 目で確認するために少し休む
      ArUtil.sleep(1000);
      // 特定商品の売り上げを元のdataSetから抽出する
      int row = dataSet.getRowIndex("商品C");
      DefaultCategoryDataset oneItem = new DefaultCategoryDataset();
      int colCount = dataSet.getColumnCount();
      for (int col=0; col<colCount; col++) {
        oneItem.addValue(dataSet.getValue(row,col),dataSet.getRowKey(row),dataSet.getColumnKey(col));
      }
      // 特定商品用の軸を生成⇒上下限を元の軸と一致させる&軸を表示しない
      final NumberAxis axis1 = new NumberAxis("");
      catPlot.setRangeAxis(1,axis1);
      catPlot.setDataset(1,oneItem);
      axis1.setRange(numAxis.getRange()); // 上下限を一致させる
      axis1.setVisible(false); // 軸を表示しないようにする
      // 特定商品のグラフを追加する⇒折れ線グラフ
      final LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
      catPlot.setRenderer(1,renderer1);
      catPlot.mapDatasetToRangeAxis(1,1);
      catPlot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
    }
  }
}


無題.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?