目次 ⇒ JFreeChartサンプル
package jp.avaj.lib.chart;
import java.awt.BasicStroke;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.chart.renderer.PolarItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import jp.avaj.lib.algo.ArUtil;
/**
■ JFreeChart-PolarChart-極座標-特定データを強調する
・(1)データセットはXYSeriesCollectionを使う.
・(2)データには角度と値を指定する.
・角度はラジアンではなく度.
・(3)レンダラはDefaultPolarItemRenderer.
・軸は一つだけ必要で、NumberAxisを指定した.
・プロットはPolarPlotというものがあるので、これを使う.
*/
public class Chart20_01 {
// PolarChar/極座標.
A_Chart20 a_Chart20;
// 目次-Artery-JFreeChart用のライブラリ
A_Chart00 a_LibChartSampeContents;
public static void main(String[] args) {
XYSeriesCollection dataset = new XYSeriesCollection(); // (1)
XYSeries data0 = new XYSeries("data0");
data0.add(0.0D, 2.0D); // (2)
data0.add(90.0D, 13.0D);
data0.add(180.0D, 9.0D);
data0.add(270.0D, 8.0D);
dataset.addSeries(data0);
XYSeries data1 = new XYSeries("data1");
data1.add(90.0D, 0.0D);
data1.add(180.0D, 22.0D);
data1.add(250.0D, 18.0D);
data1.add(355.0D, 10.9D);
dataset.addSeries(data1);
//
DefaultPolarItemRenderer renderer = new DefaultPolarItemRenderer(); // (3)
NumberAxis radiusAxis = new NumberAxis(); //(4)
PolarPlot polarPlot = new PolarPlot((XYDataset)dataset,(ValueAxis)radiusAxis,(PolarItemRenderer)renderer);
JFreeChart jfreeChart = new JFreeChart("PolerPlot",(Plot)polarPlot);
//
ChartFrame cFrame = new ChartFrame("PolerPlot",(JFreeChart)jfreeChart);
cFrame.pack();
cFrame.setVisible(true);
// 特定データ(data1)を強調する
{
// 目で確認するために少し休む
ArUtil.sleep(2000);
// Bデータのインデックスを取得する
// Datasetに挿入した順番でよいが、インデックスを改めて取得する方がよい
int index = dataset.getSeriesIndex("data1");
// 線幅を三倍に太くする
renderer.setSeriesStroke(index,new BasicStroke(((BasicStroke)renderer.getBaseStroke()).getLineWidth()*3));
//
// 目で確認するために少し休む
ArUtil.sleep(12000);
// 元に戻す
renderer.setSeriesStroke(index,null);
}
}
}