JFreeChart – グラフの描画領域の背景に設定した画像の貼り付け方式を設定するには


グラフの描画領域の背景に設定した画像の貼り付け方式を設定するには、PlotクラスのsetBackgroundImageAlignmentメソッドを使用します。

setBackgroundImageAlignmentメソッドで指定できる画像の貼り付け方式は以下の通りです。

画像の貼り付け方式 Alignクラスで定義されている値
左上 Align.TOP_LEFT
Align.TOP
右上 Align.TOP_RIGHT
Align.LEFT
中央 Align.CENTER
Align.RIGHT
左下 Align.BOTTOM_LEFT
Align.BOTTOM
右下 Align.BOTTOM_RIGHT
北西(左上) Align.NORTH_WEST
北(上) Align.NORTH
北東(右上) Align.NORTH_EAST
西(左) Align.WEST
東(右) Align.EAST
南西(左下) Align.SOUTH_WEST
南(下) Align.SOUTH
南東(右下) Align.SOUTH_EAST
領域に合わせて拡大縮小 (デフォルト) Align.FIT
水平方向を領域に合わせて拡大縮小 Align.FIT_HORIZONTAL
垂直方向を領域に合わせて拡大縮小 Align.FIT_VERTICAL

package net.tk_factory.example.jfreechart.plot;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.tk_factory.example.AbstractExample;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.Plot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.Align;

/**
 * JFreeChartを使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>グラフの描画領域の背景に設定した画像の貼り付け方式を設定します。</li>
 * </ol>
 *
 * @author Takafumi Kondo (TK Factory)
 */
public class ExampleSetBackgroundImageAlignment extends AbstractExample
{
    /** クラス名 */
    private static final String CLASS_NAME =
            ExampleSetBackgroundImageAlignment.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
            Logger.getLogger(ExampleSetBackgroundImageAlignment.class.getName());

    /** 出力ファイル名(PNG形式) */
    private static final String OUT_FILE_NAME_PNG =
            EXAMPLE_FILE_DIRECTORY +  CLASS_NAME + ".png";

    /**
     * ExampleSetBackgroundImageAlignmentオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected ExampleSetBackgroundImageAlignment()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * mainメソッドです。<br/>
     *
     * @param args 引数
     */
    public static void main(String[] args)
    {
        LOGGER.info("[START]" + CLASS_NAME);

        FileOutputStream png = null;

        try
        {
            //すでに出力ファイルが存在している場合は削除する
            deleteExistsFile(OUT_FILE_NAME_PNG);

            //レガシーテーマを設定する
            ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

            //円グラフのデータを設定する
            DefaultPieDataset dataset = new DefaultPieDataset();
            dataset.setValue("支持する", 14.3);
            dataset.setValue("どちらでもない", 70.1);
            dataset.setValue("支持しない", 15.6);

            //円グラフを生成する
            JFreeChart chart = ChartFactory.createPieChart(
                    //・グラフタイトル
                    "内閣支持率",
                    //・データセット
                    dataset,
                    //・凡例の表示有無
                    true,
                    //・ツールチップの表示有無
                    false,
                    //・URL動的生成の有無
                    false);

            Plot plot = chart.getPlot();

            //グラフの描画領域の背景に画像を設定する
            File file = new File(EXAMPLE_FILE_DIRECTORY + "Sunset.jpg");
            BufferedImage image = ImageIO.read(file);
            plot.setBackgroundImage(image);

            //グラフの描画領域の背景に設定した画像の貼り付け方式を設定する
            //・左上
            //plot.setBackgroundImageAlignment(Align.TOP_LEFT);
            //・上
            //plot.setBackgroundImageAlignment(Align.TOP);
            //・右上
            //plot.setBackgroundImageAlignment(Align.TOP_RIGHT);
            //・左
            //plot.setBackgroundImageAlignment(Align.LEFT);
            //・中央
            //plot.setBackgroundImageAlignment(Align.CENTER);
            //・右
            //plot.setBackgroundImageAlignment(Align.RIGHT);
            //・左下
            //plot.setBackgroundImageAlignment(Align.BOTTOM_LEFT);
            //・下
            //plot.setBackgroundImageAlignment(Align.BOTTOM);
            //・右下
            //plot.setBackgroundImageAlignment(Align.BOTTOM_RIGHT);

            //・北西(左上)
            //plot.setBackgroundImageAlignment(Align.NORTH_WEST);
            //・北(上)
            //plot.setBackgroundImageAlignment(Align.NORTH);
            //・北東(右上)
            //plot.setBackgroundImageAlignment(Align.NORTH_EAST);
            //・西(左)
            //plot.setBackgroundImageAlignment(Align.WEST);
            //・東(右)
            //plot.setBackgroundImageAlignment(Align.EAST);
            //・南西(左下)
            //plot.setBackgroundImageAlignment(Align.SOUTH_WEST);
            //・南(下)
            //plot.setBackgroundImageAlignment(Align.SOUTH);
            //・南東(右下)
            //plot.setBackgroundImageAlignment(Align.SOUTH_EAST);

            //・領域に合わせて拡大縮小
            plot.setBackgroundImageAlignment(Align.FIT);
            //・水平方向を領域に合わせて拡大縮小
            //plot.setBackgroundImageAlignment(Align.FIT_HORIZONTAL);
            //・垂直方向を領域に合わせて拡大縮小
            //plot.setBackgroundImageAlignment(Align.FIT_VERTICAL);

            //PNG形式でファイルへ保存する
            png = new FileOutputStream(OUT_FILE_NAME_PNG);
            ChartUtilities.writeChartAsPNG(png, chart, 600, 400);
        }
        catch (IOException ioex)
        {
            LOGGER.error(getStackTrace(ioex));
        }
        finally
        {
            try
            {
                if (png != null)
                {
                    png.close();
                }
            }
            catch (IOException ioex)
            {
                LOGGER.error(getStackTrace(ioex));
            }

            LOGGER.info("[E N D]" + CLASS_NAME);
        }
    }
}

作成されるファイルはこんな感じです。
※左上の場合

※上の場合

※右上の場合

※左の場合

※中央の場合

※右の場合

※左下の場合

※下の場合

※右下の場合

※北西(左上)の場合

※北(上)の場合

※北東(右上)の場合

※西(左)の場合

※東(右)の場合

※南西(左下)の場合

※南(下)の場合

※南東(右下)の場合

※領域に合わせて拡大縮小の場合

※水平方向を領域に合わせて拡大縮小の場合

※垂直方向を領域に合わせて拡大縮小の場合

関連記事

  1. ソースを見直し、一部、修正しました。

  1. トラックバック 0

return top