|
|
|||||||||||||||||||||||||||||
|
JFreeChart を使ったグラフ作成 凡例の設定 |
H.Kamifuji . |
|
グラフの凡例を設定する方法を確認していきます。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 に、アップされています。JDK-23 + jfreechart-1.0.19 で、上位互換について、見直しを行っていきます。 |
|
JFreeChartで凡例を取り扱うためにLegendTitleクラスが用意されています。 LegendTitleクラスのクラス図は次のようになっています。
java.lang.Object
|
+-- org.jfree.chart.block.AbstractBlock
|
+-- org.jfree.chart.title.Title
|
+-- org.jfree.chart.title.LegendTitle
public class LegendTitle extends Title implements java.lang.Cloneable,
org.jfree.util.PublicCloneable, java.io.Serializable
凡例もタイトルやサブタイトルと同じくTitleクラスのサブクラスとなっています。用意されているコンストラクタは次の2つです。
ここでは1番目のコンストラクタを確認します。 LegendTitle public LegendTitle(LegendItemSource source)Constructs a new (empty) legend for the specified source. Parameters: source - the source. 引数には凡例に表示される要素の元になるLegendItemSourceインターフェースを実装したクラスを指定します。 LegendItemSourceインターフェースはグラフ描画領域を表すPlotクラスやそのサブクラス、そして描画方法を表すBarRendererクラスなどのRendererクラスなどに実装されており、凡例の元になるJFreeChartクラスのオブジェクトからPlotクラスなどやRendererクラスなどを取得し引数に設定します。使用するグラフの種類に合わせて変更して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = new LegendTitle(chart.getPlot());上記は円グラフの場合です。 では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* LegendTitleクラス
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
public class Test1_1 extends JFrame{
public static void main(String[] args) {
Test1_1 frame = new Test1_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test1_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
false,
false,
false);
LegendTitle legend = new LegendTitle(chart.getPlot());
chart.addLegend(legend);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 「createPieChart」メソッドの引数で凡例を表示しないように設定を行った上で、LegendTitleクラスのオブジェクトを作成しグラフに追加しています。位置を指定していないので凡例はメインタイトルの下のグラフ上部に表示されます。 |
|
LegendTitleクラスのオブジェクトを使い凡例を作成することが出来ますが、作成した凡例はサブタイトルなどと同じようにグラフに追加して利用します。判例をグラフに追加するにはJFreeChartクラスで用意されている「addLegend」メソッドを使います。 addLegend public void addLegend(LegendTitle legend)Adds a legend to the plot and sends a ChartChangeEvent to all registered listeners. Parameters: legend - the legend (null not permitted). 引数には追加する凡例を表すLegendTitleクラスのオブジェクトを指定します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = new LegendTitle(chart.getPlot()); chart.addLegend(legend);グラフに凡例が追加されます。 凡例の取得グラフに追加されている凡例を取得することが出来ます。JFreeChartクラスで用意されている「getLegend」メソッドを使います。getLegend public LegendTitle getLegend()Returns the legend for the chart, if there is one. Note that a chart can have more than one legend - this method returns the first. Returns: The legend (possibly null). メソッドを実行するとグラフに追加されている凡例を表すLegendTitleクラスのオブジェクトを取得できます。 取得したLegendTitleクラスのオブジェクトに対し設定を行うと、その対象となる凡例に設定が反映されます。 なおグラフには複数の凡例を追加することが可能であり、凡例は追加された順にインデックスが割り当てられていきますが、上記のメソッドを使うと一番先頭の凡例を取得します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend();指定のインデックスの凡例を取得するには引数の異なる「getLegend」メソッドが用意されています。 getLegend public LegendTitle getLegend(int index)Returns the nth legend for a chart, or null. Parameters: index - the legend index (zero-based). Returns: The legend (possibly null). 引数に取得したい凡例のインデックスを指定します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(1);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 凡例の取得と追加(setTitle, getTitle)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
public class Test2_1 extends JFrame{
public static void main(String[] args) {
Test2_1 frame = new Test2_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test2_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
chart.addLegend(legend);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 「createPieChart」メソッドの引数で凡例を表示するように設定を行っています。そしてグラフに登録された凡例を取得した上で、再度グラフに追加しています。同じLegendTitleクラスのオブジェクトが元になっているのでまったく同じ凡例が表示されます。 |
|
追加された凡例を削除することが出来ます。凡例を削除するにはJFreeChartクラスで用意されている「removeLegend」メソッドを使います。 removeLegend public void removeLegend()Removes the first legend in the chart and sends a ChartChangeEvent to all registered listeners. メソッドを実行するとインデックスが最初の凡例を削除します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); chart.removeLegend(); chart.addLegend(legend);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 凡例の削除(removeLegend)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Color;
public class Test3_1 extends JFrame{
public static void main(String[] args) {
Test3_1 frame = new Test3_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test3_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setBackgroundPaint(Color.PINK);
chart.removeLegend();
chart.addLegend(legend);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 凡例を取得し背景を変更した後で、登録されている凡例を削除してから新しい凡例を追加しています。 |
|
凡例内のアイテムのフォントを設定する方法を確認します。フォントを設定するにはLegendTitleクラスで用意されている「setItemFont」メソッドを使います。 setItemFont public void setItemFont(java.awt.Font font)Sets the item font and sends a TitleChangeEvent to all registered listeners. Parameters: font - the font (null not permitted). 引数にはFontクラスの文字列を指定します。 例えば次のように記述します。
JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.BOLD | Font.ITALIC, 24));
Fontクラスの詳細な使い方については「Fontクラス」を参照して下さい。では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* フォントの設定(setItemFont)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
public class Test4_1 extends JFrame{
public static void main(String[] args) {
Test4_1 frame = new Test4_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test4_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.BOLD | Font.ITALIC, 20));
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例内のアイテムの前景色を設定する方法を確認します。前景色を設定するにはLegendTitleクラスで用意されている「setItemPaint」メソッドを使います。 setItemPaint public void setItemPaint(java.awt.Paint paint)Sets the item paint. Parameters: paint - the paint (null not permitted). 引数にはPaintインターフェースを実装したクラスのオブジェクトを指定します。いくつかのクラスが用意されていますが、今回はColorクラスを使って文字の色を設定してみます。Colorクラスについての詳細は「Colorクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); legend.setItemPaint(Color.RED);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 前景色の設定(setItemPaint)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Color;
import java.awt.Font;
public class Test5_1 extends JFrame{
public static void main(String[] args) {
Test5_1 frame = new Test5_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test5_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
legend.setItemPaint(Color.GREEN);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の背景色を設定する方法を確認します。背景色を設定するにはLegendTitleクラスで用意されている「setBackgroundPaint」メソッドを使います。 setBackgroundPaint public void setBackgroundPaint(java.awt.Paint paint)Sets the background paint for the legend and sends a TitleChangeEvent to all registered listeners. Parameters: paint - the paint (null permitted). 引数にはPaintインターフェースを実装したクラスのオブジェクトを指定します。Paintインターフェースを実装している主なクラスは以下の通りです。
今回はColorクラスを使って文字の色を設定してみます。Colorクラスについての詳細は「Colorクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); legend.setBackgroundPaint(Color.RED);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景色の設定(setBackgroundPaint)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Color;
import java.awt.Font;
public class Test6_1 extends JFrame{
public static void main(String[] args) {
Test6_1 frame = new Test6_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test6_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
legend.setBackgroundPaint(Color.PINK);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の背景にグラデーションを設定する方法を確認します。背景色の場合と同じくLegendTitleクラスで用意されている「setBackgroundPaint」メソッドを使います。 グラデーションの設定は様々な方法があります。詳しくは「色属性の設定」を確認して下さい。今回は例としてPaintインターフェースを実装したGradientPaintクラスを使ってみます。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); GradientPaint gradient = new GradientPaint( 50.0f, 50.0f, Color.PINK, 190.0f, 110.0f, Color.ORANGE ); legend.setBackgroundPaint(gradient);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景にグラデーションを設定
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
public class Test7_1 extends JFrame{
public static void main(String[] args) {
Test7_1 frame = new Test7_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test7_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
GradientPaint gradient = new GradientPaint(
200.0f, 0.0f, Color.WHITE,
500.0f, 0.0f, Color.BLUE
);
legend.setBackgroundPaint(gradient);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の背景をテクスチャーを使って塗りつぶす方法を確認します。背景色の場合と同じくLegendTitleクラスで用意されている「setBackgroundPaint」メソッドを使います。 テクスチャーによる塗りつぶしについてはTexturePaintクラスを使用します。詳しくは「色属性の設定」を確認して下さい。 例えば次のように記述します。
JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */
LegendTitle legend = chart.getLegend();
BufferedImage img =
new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
File f = new File("./ball.png");
try {
img = ImageIO.read(f);
}catch (IOException ex){
ex.printStackTrace();
}
Rectangle2D.Double rec =
new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight());
legend.setBackgroundPaint(new TexturePaint(img, rec));
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景にテクスチャーを設定
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;
import java.awt.geom.Rectangle2D;
public class Test8_1 extends JFrame{
public static void main(String[] args) {
Test8_1 frame = new Test8_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test8_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
BufferedImage img =
new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
File f = new File("./ball.png");
try {
img = ImageIO.read(f);
}catch (IOException ex){
ex.printStackTrace();
}
Rectangle2D.Double rec =
new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight());
legend.setBackgroundPaint(new TexturePaint(img, rec));
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回読み込んだ画像は次のような画像です ![]() |
|
凡例はデフォルトではグラフの下部に表示されていますが、表示する位置を指定することが可能です。位置を設定するにはLegendTitleクラスの親クラスである「org.jfree.chart.title.Title」で用意されている「setPosition」メソッドを使います。 setPosition public void setPosition(org.jfree.ui.RectangleEdge position)Sets the position for the title and sends a TitleChangeEvent to all registered listeners. Parameters: position - the position (null not permitted). 引数には「org.jfree.ui.RectangleEdge」クラスのオブジェクトを指定します。このクラスでは次の4つのstaticフィールドが用意されていますのでいずれかを指定します。 RectangleEdge.BOTTOM 画面上部 RectangleEdge.LEFT 画面左辺 RectangleEdge.RIGHT 画面右辺 RectangleEdge.TOP 画面下部例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); title.setPosition(RectangleEdge.TOP);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 凡例の位置の設定(setPosition)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import org.jfree.ui.RectangleEdge;
import java.awt.Font;
public class Test9_1 extends JFrame{
public static void main(String[] args) {
Test9_1 frame = new Test9_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test9_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
legend.setPosition(RectangleEdge.TOP);
// legend.setPosition(RectangleEdge.BOTTOM);
// legend.setPosition(RectangleEdge.LEFT);
// legend.setPosition(RectangleEdge.RIGHT);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回はRectangleEdge.TOPを指定した場合です。なお他の位置を指定した場合は次のようになります。実行結果だけ表示します。 RectangleEdge.BOTTOM : ![]() RectangleEdge.LEFT : ![]() RectangleEdge.RIGHT : ![]() |
|
凡例を上部又は下部に設置した場合、凡例の水平方向の位置を指定することが可能です。水平位置を設定するにはLegendTitleクラスの親クラスである「org.jfree.chart.title.Title」で用意されている「setHorizontalAlignment」メソッドを使います。 setHorizontalAlignment public void setHorizontalAlignment(org.jfree.ui.HorizontalAlignment alignment)Sets the horizontal alignment for the title and sends a TitleChangeEvent to all registered listeners. Parameters: alignment - the horizontal alignment (null not permitted). 引数には「org.jfree.ui.HorizontalAlignment」クラスのオブジェクトを指定します。このクラスでは次の3つのstaticフィールドが用意されていますのでいずれかを指定します。 HorizontalAlignment.CENTER 中央 HorizontalAlignment.LEFT 左 HorizontalAlignment.RIGHT 右例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); title.setPosition(RectangleEdge.TOP); title.setHorizontalAlignment(HorizontalAlignment.RIGHT);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 凡例の水平位置(setHorizontalAlignment)
* HorizontalAlignment.RIGHT
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.HorizontalAlignment;
import java.awt.Font;
public class Test10_1 extends JFrame{
public static void main(String[] args) {
Test10_1 frame = new Test10_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test10_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
legend.setPosition(RectangleEdge.TOP);
// legend.setHorizontalAlignment(HorizontalAlignment.CENTER);
// legend.setHorizontalAlignment(HorizontalAlignment.LEFT);
legend.setHorizontalAlignment(HorizontalAlignment.RIGHT);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回はHorizontalAlignment.RIGHTを指定した場合です。なお他の位置を指定した場合は次のようになります。実行結果だけ表示します。 HorizontalAlignment.CENTER : ![]() HorizontalAlignment.LEFT : ![]() |
|
凡例を右辺又は左辺に設置した場合、凡例の垂直方向の位置を指定することが可能です。垂直方向を設定するにはLegendTitleクラスの親クラスである「org.jfree.chart.title.Title」で用意されている「setVerticalAlignment」メソッドを使います。 setVerticalAlignment public void setVerticalAlignment(org.jfree.ui.VerticalAlignment alignment)Sets the vertical alignment for the title, and notifies any registered listeners of the change. Parameters: alignment - the new vertical alignment (TOP, MIDDLE or BOTTOM, null not permitted). 引数には「org.jfree.ui.VerticalAlignment」クラスのオブジェクトを指定します。このクラスでは次の3つのstaticフィールドが用意されていますのでいずれかを指定します。 VerticalAlignment.CENTER 中央 VerticalAlignment.TOP 上 VerticalAlignment.BOTTOM 下例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); title.setPosition(RectangleEdge.RIGHT); title.setVerticalAlignment(VerticalAlignment.BOTTOM);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 凡例の垂直位置(setVerticalAlignment)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.VerticalAlignment;
import java.awt.Font;
public class Test11_1 extends JFrame{
public static void main(String[] args) {
Test11_1 frame = new Test11_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test11_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 20));
legend.setPosition(RectangleEdge.RIGHT);
// legend.setVerticalAlignment(VerticalAlignment.CENTER);
// legend.setVerticalAlignment(VerticalAlignment.TOP);
legend.setVerticalAlignment(VerticalAlignment.BOTTOM);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回はVerticalAlignment.BOTTOMを指定した場合です。なお他の位置を指定した場合は次のようになります。実行結果だけ表示します。 VerticalAlignment.CENTER : ![]() VerticalAlignment.TOP : ![]() |
|
凡例のアイテムなどが表示される部分と枠線との間のパディングを設定することが可能です。パディングを設定するにはLegendTitleクラスの親クラスである「org.jfree.chart.block.AbstractBlock」で用意されている「setPadding」メソッドを使います。
setPadding
public void setPadding(double top,
double left,
double bottom,
double right)
Sets the padding.Parameters: top - the top padding. left - the left padding. bottom - the bottom padding. right - the right padding. 引数には上左下右のパディングのサイズをdouble型の値でそれぞれ指定します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); title.setPadding(2d, 2d, 2d, 2d);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* パディングの設定(setPadding)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
public class Test12_1 extends JFrame{
public static void main(String[] args) {
Test12_1 frame = new Test12_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test12_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
legend.setPadding(5d, 5d, 5d, 5d);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回はパディングを5ピクセルに設定してあります。なお他の例として15ピクセルに設定した場合は次のようになります。 ![]() |
|
凡例のグラフ内でのマージンを設定することが可能です。マージンを設定するにはLegendTitleクラスの親クラスである「org.jfree.chart.block.AbstractBlock」で用意されている「setMargin」メソッドを使います。
setMargin
public void setMargin(double top,
double left,
double bottom,
double right)
Parameters: top - the top margin. left - the left margin. bottom - the bottom margin. right - the right margin. 引数には上左下右のマージンのサイズをdouble型の値でそれぞれ指定します。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); title.setMargin(2d, 2d, 2d, 2d);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* マージンの設定(setMargin)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
public class Test13_1 extends JFrame{
public static void main(String[] args) {
Test13_1 frame = new Test13_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test13_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
legend.setMargin(5d, 5d, 5d, 5d);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 今回はマージンを5ピクセルに設定してあります。なお他の例として15ピクセルに設定した場合は次のようになります。 ![]() |
|
凡例に枠線を設定する方法を確認します。いくつかの方法が用意されていますので順に確認していきます。 1番目の方法はLegendTitleクラスの親クラスである「org.jfree.chart.block.AbstractBlock」で用意されている「setBorder」メソッドを使います。
setBorder
public void setBorder(double top,
double left,
double bottom,
double right)
Sets a black border with the specified line widths.Parameters: top - the top border line width. left - the left border line width. bottom - the bottom border line width. right - the right border line width. 引数には上左下右の枠線の太さをdouble型の値でそれぞれ指定します。このメソッドを使用する場合は枠線の色は黒になります。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); legend.setBorder(2d, 2d, 2d, 2d);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 枠線の設定(setBorder, setFrame)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
public class Test14_1 extends JFrame{
public static void main(String[] args) {
Test14_1 frame = new Test14_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test14_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
legend.setBorder(2d, 2d, 2d, 2d);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 枠線の色を指定する2番目の方法はLegendTitleクラスの親クラスである「org.jfree.chart.block.AbstractBlock」で用意されている「setFrame」メソッドを使います。setFrame public void setFrame(BlockFrame frame)Sets the frame (or border). Parameters: frame - the frame (null not permitted). 引数にはBlockFrameインターフェースを実装したクラスのオブジェクトを指定します。実装クラスとしては「org.jfree.chart.block.BlockBorder」と「org.jfree.chart.block.LineBorder」の2つがあり、今回は「org.jfree.chart.block.BlockBorder」を使います。 BlockBorderクラスについてはタイトルの枠線の設定で使用したものと同じです。詳しくは「枠線の設定(setBorder, setFrame)」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); BlockBorder border = new BlockBorder(2d, 2d, 2d, 2d, Color.RED); legend.setFrame(border);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 枠線の色を指定する
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import java.awt.Color;
import org.jfree.chart.block.BlockBorder;
public class Test14_2 extends JFrame{
public static void main(String[] args) {
Test14_2 frame = new Test14_2();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test14_2(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
BlockBorder border = new BlockBorder(2d, 2d, 2d, 2d, Color.ORANGE);
legend.setFrame(border);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 線の種類を指定する3番目の方法は「setFrame」メソッドの引数に「org.jfree.chart.block.LineBorder」を使います。LineBorderクラスについてはタイトルの枠線の設定で使用したものと同じです。詳しくは「枠線の設定(setBorder, setFrame)」を参照して下さい。 例えば次のように記述します。
JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */
LegendTitle legend = chart.getLegend();
float dash[] = {10.0f, 3.0f};
BasicStroke dsahStroke = new BasicStroke(3.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER,
3.0f,
dash,
0.0f);
RectangleInsets insets = new RectangleInsets(1d, 1d, 1d, 1d);
LineBorder border = new LineBorder(Color.RED, dsahStroke, insets);
legend.setFrame(border);
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 線の種類を指定する
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import java.awt.Color;
import org.jfree.chart.block.LineBorder;
import org.jfree.ui.RectangleInsets;
import java.awt.BasicStroke;
public class Test14_3 extends JFrame{
public static void main(String[] args) {
Test14_3 frame = new Test14_3();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test14_3(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
float dash[] = {10.0f, 3.0f};
BasicStroke dsahStroke = new BasicStroke(3.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER,
3.0f,
dash,
0.0f);
RectangleInsets insets = new RectangleInsets(4d, 4d, 4d, 4d);
LineBorder border = new LineBorder(Color.ORANGE, dsahStroke, insets);
legend.setFrame(border);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例内に表示される各アイテムは画像とラベルの組み合わせで構成されています。ラベル及び画像は凡例の中でそれぞれ別々のパディングを設定可能です。ここではまずラベルのパディングの設定方法を確認します。LegendTitleクラスで用意されている「setItemLabelPadding」メソッドを使います。 setItemLabelPadding public void setItemLabelPadding(org.jfree.ui.RectangleInsets padding)Sets the padding used for the item labels in the legend. Parameters: padding - the padding (null not permitted). 引数にはRectangleInsetsクラスのオブジェクトを使って上左下右のパディングの量を指定します。RectangleInsetsクラスについては「RectangleInsetsクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); RectangleInsets insets = new RectangleInsets(3d, 3d, 3d, 3d); legend.setItemLabelPadding(insets);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* ラベルのパディングの設定(setItemLabelPadding)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import org.jfree.ui.RectangleInsets;
public class Test15_1 extends JFrame{
public static void main(String[] args) {
Test15_1 frame = new Test15_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test15_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
RectangleInsets insets = new RectangleInsets(10d, 10d, 0d, 5d);
legend.setItemLabelPadding(insets);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の中に表示される各アイテムの画像のパディングの設定方法を確認します。LegendTitleクラスで用意されている「setLegendItemGraphicPadding」メソッドを使います。 setLegendItemGraphicPadding public void setLegendItemGraphicPadding(org.jfree.ui.RectangleInsets padding)Sets the padding that will be applied to each item graphic in the legend and sends a TitleChangeEvent to all registered listeners. Parameters: padding - the padding (null not permitted). 引数にはRectangleInsetsクラスのオブジェクトを使って上左下右のパディングの量を指定します。RectangleInsetsクラスについては「RectangleInsetsクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); RectangleInsets insets = new RectangleInsets(3d, 3d, 3d, 3d); legend.setLegendItemGraphicPadding(insets);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 画像のパディングの設定(setLegendItemLabelPadding)
* setLegendItemGraphicPadding
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import org.jfree.ui.RectangleInsets;
public class Test16_1 extends JFrame{
public static void main(String[] args) {
Test16_1 frame = new Test16_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test16_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
RectangleInsets insets = new RectangleInsets(10d, 10d, 0d, 5d);
legend.setLegendItemGraphicPadding(insets);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の中に表示される各アイテムの画像の位置の設定方法を確認します。LegendTitleクラスで用意されている「setLegendItemGraphicLocation」メソッドを使います。 setLegendItemGraphicLocation public void setLegendItemGraphicLocation(org.jfree.ui.RectangleAnchor anchor)Sets the legend item graphic location. Parameters: anchor - the anchor (null not permitted). 引数にはRectangleAnchorクラスのオブジェクトを使ってアイテムの画像の位置を指定します。RectangleAnchorクラスについては「RectangleAnchorクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); legend.setLegendItemGraphicLocation(RectangleAnchor.TOP);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/*
* 画像の位置の設定(setLegendItemGraphicLocation)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import org.jfree.ui.RectangleAnchor;
public class Test17_1 extends JFrame{
public static void main(String[] args) {
Test17_1 frame = new Test17_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test17_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
legend.setLegendItemGraphicLocation(RectangleAnchor.TOP);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() |
|
凡例の中に表示される各アイテムのラベルに対する画像の位置の設定方法を確認します。LegendTitleクラスで用意されている「setLegendItemGraphicEdge」メソッドを使います。 setLegendItemGraphicEdge public void setLegendItemGraphicEdge(org.jfree.ui.RectangleEdge edge)Sets the location of the shape within each legend item. Parameters: edge - the edge (null not permitted). 引数にはRectangleEdgeクラスのオブジェクトを使ってラベルに対する画像の位置を指定します。RectangleEdgeクラスについては「RectangleEdgeクラス」を参照して下さい。 例えば次のように記述します。 JFreeChart chart = ChartFactory.createPieChart(...); /* 引数は省略 */ LegendTitle legend = chart.getLegend(); legend.setLegendItemGraphicEdge(RectangleEdge.TOP);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* ラベルに対する画像の位置の設定(setLegendItemGraphicEdge)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.plot.Plot;
import java.awt.Font;
import org.jfree.ui.RectangleEdge;
public class Test18_1 extends JFrame{
public static void main(String[] args) {
Test18_1 frame = new Test18_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test18_1(){
JFreeChart chart =
ChartFactory.createPieChart("夏の旅行",
createData(),
true,
false,
false);
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("MS 明朝", Font.PLAIN, 16));
legend.setLegendItemGraphicEdge(RectangleEdge.TOP);
// legend.setLegendItemGraphicEdge(RectangleEdge.BOTTOM);
// legend.setLegendItemGraphicEdge(RectangleEdge.LEFT);
// legend.setLegendItemGraphicEdge(RectangleEdge.RIGHT);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("海外", 30);
data.setValue("国内", 60);
data.setValue("行かない", 8);
data.setValue("未定", 2);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() 上記はRectangleEdge.TOPを指定した場合です。他の値を指定した場合も結果だけ表示しておきます。 RectangleEdge.BOTTOM : ![]() RectangleEdge.LEFT : ![]() RectangleEdge.RIGHT : ![]() |
|