|
|
|||||||||||||||||||||||||||||
|
JFreeChart を使ったグラフ作成 グラフ全体の設定 |
H.Kamifuji . |
|
グラフ全体の枠線や背景など、グラフ全体の設定方法を確認します。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 に、jfreechart-1.5.5 にアップされています。一部、上位互換について、見直しを行っていきます。 .png 画像データ作成時に実行時エラーが発生する。jfreechart-1.0.19 で、実行してください。 現在(2024/10)では、JDK-23 に、アップされています。JDK-23 + jfreechart-1.0.19 で、上位互換について、見直しを行っていきます。 |
|
|
|
グラフに枠線を表示するかどうかを設定します。JFreeChartクラスで用意されている「setBorderVisible」メソッドを使います。 setBorderVisible public void setBorderVisible(boolean visible)Sets a flag that controls whether or not a border is drawn around the outside of the chart. Parameters: visible - the flag. 枠線を表示する場合は引数に「true」、表示しない場合は「false」を指定します。デフォルトでは「false」となっています。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
chart.setBorderVisible(true);
なお現在枠線が表示されるようになっているかどうかを確認するためにJFreeChartクラスで「isBorderVisible」メソッドが用意されています。isBorderVisible public boolean isBorderVisible()Returns a flag that controls whether or not a border is drawn around the outside of the chart. Returns: A boolean. 現在枠線が表示されるようになっている場合は「true」を、非表示になっている場合は「false」を返します。 では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 枠線の表示(setBorderVisible)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.ChartUtilities;
import java.io.File;
import java.io.IOException;
public class Test1_1{
public static void main(String[] args) {
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
JFreeChart chart =
ChartFactory.createPieChart("昼食", data, false, false, false);
System.out.println(chart.isBorderVisible());
File file1 = new File("./test1_1.png");
try {
ChartUtilities.saveChartAsPNG(file1, chart, 400, 400);
} catch (IOException e) {
e.printStackTrace();
}
chart.setBorderVisible(true);
System.out.println(chart.isBorderVisible());
File file2 = new File("./test1_2.png");
try {
ChartUtilities.saveChartAsPNG(file2, chart, 400, 400);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上記をコンパイルした後で実行すると次のように表示されます。[xxxxxxxx@dddddddddd Setting]$ javac Test1_1.java [xxxxxxxx@dddddddddd Setting]$ java Test1_1 false true [xxxxxxxx@dddddddddd Setting]$JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。 [xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java false Exception in thread "main" java.lang.NoClassDefFoundError: org/jfree/chart/ChartUtilities at Test1_1.main(Test1_1.java:26) Caused by: java.lang.ClassNotFoundException: org.jfree.chart.ChartUtilities at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ... 1 more [xxxxxxxx@dddddddddd Wrapper_class]$実行するとグラフをPNG画像として保存します。今回は枠線無しと枠線有りの2つの画像が作成されます。 枠線無し: ![]() 枠線有り: ![]() |
|
グラフに枠線を表示する設定にしている場合、枠線の色を指定することが出来ます。JFreeChartクラスで用意されている「setBorderPaint」メソッドを使います。 setBorderPaint public void setBorderPaint(java.awt.Paint paint)Sets the paint used to draw the chart border (if visible). Parameters: paint - the paint. 引数にはPaintインターフェースを実装したクラスのオブジェクトを指定します。 Paintインターフェースを実装したクラスとしては次のようなものがあります。(詳細は「色属性の設定」などを参照して下さい)。 Color 単純色 GradientPaint 線形グラデーションパターン TexturePaint テクスチャーによる塗りつぶし LinearGradientPaint 線形グラデーションパターン RadialGradientPaint 円放射状グラデーションパターングラデーションやテクスチャーなども利用できますが、今回は単に色を指定してみます。色指定の場合は「java.awt.Color」クラスのオブジェクトを使います。(Colorクラスについては「Colorクラス」を参照して下さい)。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
chart.setBorderVisible(true);
chart.setBorderPaint(Color.RED);
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 枠線の色の指定(setBorderPaint)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.ChartUtilities;
import java.io.File;
import java.io.IOException;
import java.awt.Color;
public class Test2_1{
public static void main(String[] args) {
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
JFreeChart chart =
ChartFactory.createPieChart("昼食", data, false, false, false);
chart.setBorderVisible(true);
chart.setBorderPaint(Color.RED);
File file = new File("./test2_1.png");
try {
ChartUtilities.saveChartAsPNG(file, chart, 400, 400);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上記をコンパイルした後で実行すると次のように表示されます。[xxxxxxxx@dddddddddd Setting]$ javac Test2_1.java [xxxxxxxx@dddddddddd Setting]$ java Test2_1 [xxxxxxxx@dddddddddd Setting]$JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。 [xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java Exception in thread "main" java.lang.NoClassDefFoundError: org/jfree/chart/ChartUtilities at Test2_1.main(Test2_1.java:28) Caused by: java.lang.ClassNotFoundException: org.jfree.chart.ChartUtilities at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ... 1 more [xxxxxxxx@dddddddddd Wrapper_class]$実行するとグラフをPNG画像として保存します。今回は枠線を表示し色を赤に設定しています。 ![]() |
|
グラフに枠線を表示する設定にしている場合、枠線の線の属性を指定することが出来ます。JFreeChartクラスで用意されている「setBorderStroke」メソッドを使います。 setBorderStroke public void setBorderStroke(java.awt.Stroke stroke)Sets the stroke used to draw the chart border (if visible). Parameters: stroke - the stroke. 引数にはStrokeインターフェースを実装したクラスのオブジェクトを指定します。 Strokeインターフェースを実装したクラスとしては「java.awt.BasicStroke」クラスがあります。線の形状や太さなどの設定が可能です。(詳細は「線属性の設定」などを参照して下さい)。 線の太さをや形状を指定するには次のコンストラクタを使用します。
BasicStroke
public BasicStroke(float width,
int cap,
int join,
float miterlimit,
float[] dash,
float dash_phase)
指定された属性を持つ新しい BasicStroke を構築します。パラメータ: width - この BasicStroke の幅。値は 0.0f 以上でなければならない。幅 が 0.0f に設定されている場合、ストロークは対象のデバイス上のもっと も細いラインとして描画される。 また、このときアンチエイリアス設定 が使用される cap - BasicStroke の両端の装飾 join - 輪郭線セグメントの接合部の装飾 miterlimit - 接合トリミングの制限値。miterlimit は 1.0f 以上でなければならない dash - 破線パターンを表す配列 dash_phase - 破線パターン開始位置のオフセット 1番目の引数と5番目と6番目の引数だけが重要です。線の形状の指定方法など詳しくは「破線パターンの設定」を参照して下さい。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
chart.setBorderVisible(true);
chart.setBorderPaint(Color.red);
float dash[] = {10.0f, 3.0f};
BasicStroke dsahStroke = new BasicStroke(5.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER,
3.0f,
dash,
0.0f);
chart.setBorderStroke(dsahStroke);
上記では線の太さを5.0fとし、線の形状を破線に設定しています。では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。
/**
* 枠線の線属性の指定(setBorderStroke)
*/
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.ChartUtilities;
import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.BasicStroke;
public class Test3_1{
public static void main(String[] args) {
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
JFreeChart chart =
ChartFactory.createPieChart("昼食", data, false, false, false);
chart.setBorderVisible(true);
chart.setBorderPaint(Color.red);
float dash[] = {10.0f, 3.0f};
BasicStroke dsahStroke = new BasicStroke(5.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER,
3.0f,
dash,
0.0f);
chart.setBorderStroke(dsahStroke);
File file = new File("./test3_1.png");
try {
ChartUtilities.saveChartAsPNG(file, chart, 400, 400);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上記をコンパイルした後で実行すると次のように表示されます。[xxxxxxxx@dddddddddd Setting]$ javac Test3_1.java [xxxxxxxx@dddddddddd Setting]$ java Test3_1 [xxxxxxxx@dddddddddd Setting]$JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。 [xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java Exception in thread "main" java.lang.NoClassDefFoundError: org/jfree/chart/ChartUtilities at Test3_1.main(Test3_1.java:38) Caused by: java.lang.ClassNotFoundException: org.jfree.chart.ChartUtilities at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ... 1 more [xxxxxxxx@dddddddddd Wrapper_class]$実行するとグラフをPNG画像として保存します。今回は枠線を表示し色を赤に設定したあとで、線の太さと形状を設定しています。 ![]() |
|
グラフ全体の背景色を設定する方法を確認します。JFreeChartクラスで用意されている「setBackgroundPaint」メソッドを使います。 setBackgroundPaint public void setBackgroundPaint(java.awt.Paint paint)Sets the paint used to fill the chart background and sends a ChartChangeEvent to all registered listeners. Parameters: paint - the paint (null permitted). 引数にはjava.awt.Paintインターフェースを実装したクラスのオブジェクトを指定します。Paintインターフェースを実装している主なクラスは以下の通りです。
ここでは単純色を使って背景の色を設定します。Colorクラスについての詳細は「Colorクラス」を参照して下さい。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
chart.setBackgroundPaint(new Color(255, 248, 220));
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景の色の設定(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 java.awt.Color;
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(), false, false, false);
chart.setBackgroundPaint(new Color(255, 248, 220));
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() グラフ内のグラフ描画領域を除いた背景色が指定した色に設定されています。 下記のように setBackgroundPaint を変更してみました。 28c28 < chart.setBackgroundPaint(new Color(255, 248, 220)); --- > chart.setBackgroundPaint(new Color(176, 255, 176));グラフ内のグラフ描画領域を除いた背景色が指定した色に変更されています。 ![]() |
|
グラフ全体の背景色に単純色ではなくグラデーションを設定します。 グラデーションの設定は様々な方法があります。詳しくは「色属性の設定」を確認して下さい。今回は例としてPaintインターフェースを実装したGradientPaintクラスを使ってみます。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
GradientPaint gradient = new GradientPaint(
50.0f, 50.0f, Color.ORANGE,
190.0f, 110.0f, Color.YELLOW
);
chart.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 java.awt.Color;
import java.awt.GradientPaint;
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(), false, false, false);
GradientPaint gradient = new GradientPaint(
50.0f, 50.0f, Color.ORANGE,
190.0f, 110.0f, Color.YELLOW
);
chart.setBackgroundPaint(gradient);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() グラフ内のグラフ描画領域を除いた背景色が作成したグラデーションを使って塗りつぶされています。 下記のように 配色を変更してみました。 30,31c30,31 < 50.0f, 50.0f, Color.ORANGE, < 190.0f, 110.0f, Color.YELLOW --- > 50.0f, 50.0f, Color.BLUE, > 190.0f, 110.0f, Color.RED ![]() |
|
グラフ全体の背景をテクスチャーを使って塗りつぶします。 テクスチャーによる塗りつぶしについてはTexturePaintクラスを使用します。詳しくは「色属性の設定」を確認して下さい。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
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());
chart.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 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 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(), false, false, false);
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());
chart.setBackgroundPaint(new TexturePaint(img, rec));
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
上記をコンパイルした後で実行すると次のように表示されます。![]() グラフ内のグラフ描画領域を除いた背景にテクスチャーを使って塗りつぶしを行っています。 今回読み込んだ画像は次のような画像です。 ![]() |
|
グラフ全体の背景の上に背景画像を設定することが出来ます。JFreeChartクラスで用意されている「setBackgroundImage」メソッドを使います。 setBackgroundImage public void setBackgroundImage(java.awt.Image image)Sets the background image for the chart and sends a ChartChangeEvent to all registered listeners. Parameters: image - the image (null permitted). 引数にはjava.awt.Imageクラスのオブジェクトを指定します。今回はImageクラスのサブクラスであるjava.awt.image.BufferedImageクラスのオブジェクトを利用します。(BufferedImageクラスについては「BufferedImageの使い方色々」を参照して下さい)。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
BufferedImage image = null;
try {
image = ImageIO.read(new File("./hana.png"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
chart.setBackgroundImage(image);
背景画像を使用した場合、グラフ全体の背景としては背景画像、背景、の順に表示されます。なお描画領域と貼り付ける画像の大きさが異なる場合、デフォルトの設定では画像を描画領域の大きさに合わせて拡大縮小して貼り付けられます。 画像の貼り付け方式を設定描画領域の中で画像がどのように貼り付けられるのかを指定することが可能です。JFreeChartクラスで用意されている「setBackgroundImageAlignment」メソッドを使います。setBackgroundImageAlignment public void setBackgroundImageAlignment(int alignment)Sets the background alignment. Alignment options are defined by the Align class. Parameters: alignment - the alignment. 引数には「org.jfree.ui.Align」クラスで定義されているstaticフィールドを使って指定します。(Alignクラスについては「Alignクラス」を参照して下さい)。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
BufferedImage image = null;
try {
image = ImageIO.read(new File("./hana.png"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
chart.setBackgroundImage(image);
chart.setBackgroundImageAlignment(Align.RIGHT);
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景画像を設定(setBackgroundImage, setBackgroundImageAlignment)
* Align.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 java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;
import org.jfree.ui.Align;
import org.jfree.ui.RectangleInsets;
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(), false, false, false);
RectangleInsets insets = new RectangleInsets(30d, 30d, 30d, 30d);
chart.setPadding(insets);
BufferedImage image = null;
try {
image = ImageIO.read(new File("./haikei.gif"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
chart.setBackgroundImage(image);
chart.setBackgroundImageAlignment(Align.RIGHT);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。[xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java Exception in thread "main" java.lang.NoSuchMethodError: 'void org.jfree.chart.JFreeChart.setPadding(org.jfree.ui.RectangleInsets)' at Test7_1.上記をコンパイルした後で実行すると次のように表示されます。 ![]() 上記はAlign.RIGHTを設定した場合です。(分かりやすいようにパディングも設定してあります)。いくつか他の値を指定した場合の実行結果を下記に表示します。 Align.FIT : (デフォルト) ![]() Align.TOP_LEFT : ![]() |
|
グラフ全体の背景画像の透明度を設定する方法を確認します。JFreeChartクラスで用意されている「setBackgroundImageAlpha」メソッドを使います。 setBackgroundImageAlpha public void setBackgroundImageAlpha(float alpha)Sets the alpha-transparency for the chart's background image. Registered listeners are notified that the chart has been changed. Parameters: alpha - the alpha value. 引数には透明度を表すfloat型の数値を指定します。数値は0.0fから1.0fの間で指定し、0.0fを指定すると完全な透明となり1.0fを指定すると非透明となります。デフォルトでは0.5fが設定されています。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
BufferedImage image = null;
try {
image = ImageIO.read(new File("./hana.png"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
chart.setBackgroundImage(image);
chart.setBackgroundImageAlignment(Align.RIGHT);
chart.setBackgroundImageAlpha(0.7f);
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* 背景画像の透明度を設定(setBackgroundImageAlpha)
*/
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 java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;
import org.jfree.ui.Align;
import org.jfree.ui.RectangleInsets;
import java.awt.Color;
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(), false, false, false);
RectangleInsets insets = new RectangleInsets(30d, 30d, 30d, 30d);
chart.setPadding(insets);
BufferedImage image = null;
try {
image = ImageIO.read(new File("./haikei.gif"));
} catch (Exception e) {
e.printStackTrace();
image = null;
}
chart.setBackgroundPaint(new Color(255, 250, 205));
chart.setBackgroundImage(image);
chart.setBackgroundImageAlignment(Align.BOTTOM_LEFT);
chart.setBackgroundImageAlpha(0.7f);
// chart.setBackgroundImageAlpha(0.5f);
// chart.setBackgroundImageAlpha(0.2f);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。[xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java Exception in thread "main" java.lang.NoSuchMethodError: 'void org.jfree.chart.JFreeChart.setPadding(org.jfree.ui.RectangleInsets)' at Test8_1.上記をコンパイルした後で実行すると次のように表示されます。 ![]() 上記は 0.7f を設定した場合です。いくつか他の値を指定した場合の実行結果を下記に表示します。 0.5f : (デフォルト) ![]() 0.2f : ![]() |
|
グラフ全体の中で外枠とグラフ部分(グラフ描画領域にタイトルや凡例なども含めたエリア)の間のパディングを設定する方法を確認します。JFreeChartクラスで用意されている「setPadding」メソッドを使います。 setPadding public void setPadding(org.jfree.ui.RectangleInsets padding)Sets the padding between the chart border and the chart drawing area, and sends a ChartChangeEvent to all registered listeners. Parameters: padding - the padding (null not permitted). 引数にはRectangleInsetsクラスのオブジェクトを使って上左下右のパディングの量を指定します。RectangleInsetsクラスについては「RectangleInsetsクラス」を参照して下さい。 実際の使い方は次のようになります。
JFreeChart chart =
ChartFactory.createPieChart("title", data, false, false, false);
RectangleInsets insets = new RectangleInsets(3d, 3d, 3d, 3d);
chart.setItemLabelPadding(insets);
では簡単なサンプルを作成して試してみます。サンプルプログラム下記のサンプルを実行してみよう。
/**
* パディングの設定(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.ui.RectangleInsets;
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);
RectangleInsets insets = new RectangleInsets(15d, 30d, 15d, 30d);
chart.setPadding(insets);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private DefaultPieDataset createData(){
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("外食", 37);
data.setValue("弁当", 31);
data.setValue("食べない", 32);
return data;
}
}
JDK-23 + jfreechart-1.5.5 では、下記の実行時エラーが発生しました。[xxxxxxxx@dddddddddd Wrapper_class]$ javac JSample4_1.java Exception in thread "main" java.lang.NoSuchMethodError: 'void org.jfree.chart.JFreeChart.setPadding(org.jfree.ui.RectangleInsets)' at Test9_1.上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
|