Показ дописів із міткою JFreeChart. Показати всі дописи
Показ дописів із міткою JFreeChart. Показати всі дописи

понеділок, 25 червня 2012 р.

Розділ 7 Лінійні діаграми

7.1 Вступ

Даний розділ описує лінійні діаграми (або ж лінійні графіки - line charts), що можуть бути створені з JFreeChart. Створення лінійних графіків можливе через використання інтерфейсу CategoryDataset або інтерфейсу XYDataset.

7.2 Графіки засновані на CategoryDataset
7.2.1 Загальний огляд


Лінійні графіки засновані на CategoryDataset просто з’єднують кожну точку(категорія, значення) даних прямими лініями. В даній секції представлений приклад, що генерує графік, показаний на рисунку 7.1

Рисунок 7.1 – Приклад лінійного графіка.

Повний джерельний код даної демо програми (LineChartDemo1.java) наявний для завантаження разом з JFreeChart Developer Guide.

7.2.2 Набір даних (Dataset)

Першим кроком, як завжди, є створення набору даних. В прикладі для цього використано клас DefaultCategoryDataset:

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(212, "Classes", "JDK 1.0");
dataset.addValue(504, "Classes", "JDK 1.1");
dataset.addValue(1520, "Classes", "SDK 1.2");
dataset.addValue(1842, "Classes", "SDK 1.3");
dataset.addValue(2991, "Classes", "SDK 1.4");

Зауважте, що ви можете використовувати будь-яку реалізацію інтерфейсу CategoryDataset для вашого набору даних.

7.2.3 Конструювання діаграми


Метод createLineChart() класу ChartFactory надає зручний шлях створення діаграми. Ось код:

// create the chart...
JFreeChart chart = ChartFactory.createLineChart(
  "Java Standard Class Library", // chart title
  "Release", // domain axis label
  "Class Count", // range axis label
  dataset, // data
  PlotOrientation.VERTICAL, // orientation
  false, // include legend
  true, // tooltips
  false // urls
);


В даному випадку метод створює об’єкт JFreeChart із заголовком (title), без легенди, з відповідними осями, візуалізатором та генератором підказок. Набір даних створений в попередньому пункті.

7.2.4 Модифікація діаграми

Діаграма буде ініціалізована використовуючи налаштування по замовчування для більшості атрибутів. Ви ж, звивайно, можете модифікувати будь-які налаштування і тим самим змінити зовнішній вигляд діаграми. В цьому прикладі, ми модифікуємо діаграму наступним чином:

• Буде додано два підзаголовка до діаграми
• Буде встановлений білий фоновий колір діаграми
• Фоновий колір для самої області графіка (plot) встановимо світло-сірим
• Лінії координатної сітки зробимо білими
• Вісь значень буде модифіковано так, щоб показувала лише цілі числа
• Візуалізатор (renderer) буде модифікований так, щоб здійснив заповнення точок на графіку білим кольором

Перший підзаголовок додається до позиції по замовчуванню (під основним заголовком):

chart.addSubtitle(new TextTitle("Number of Classes By Release"));

Наступний підзаголовок вимагає дещо більше коду. Встановлюємо шрифт та розміщуємо знизу діаграми з вирівнюванням вправо:

TextTitle source = new TextTitle(
  "Source: Java In A Nutshell (4th Edition) "
  + "by David Flanagan (O’Reilly)"
);
source.setFont(new Font("SansSerif", Font.PLAIN, 10));
source.setPosition(RectangleEdge.BOTTOM);
source.setHorizontalAlignment(HorizontalAlignment.RIGHT);
chart.addSubtitle(source);

Змінити фоновий колір діаграми просто, тому, що це атрибут класу JFreeChart:

chart.setBackgroundPaint(Color.white);

Для зміни інших атрибутів, ми передусім повинні отримати посилання на об’єкт CategoryPlot:

CategoryPlot plot = (CategoryPlot) chart.getPlot();

Щоб встановити фоновий колір для області побудови графіка і змінити колір ліній сітки:

plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.white);

Область побудови графіка (plot)  відповідає за малювання даних та осей на діаграмі. Дещо з цієї роботи делеговано візуалізатору (renderer), до якого вим можете доступитися через метод getRenderer(). Візуалізатор містить атрибути, що пов’язані з зовнішнім виглядом елементів даних всередині діаграми:

LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); 
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true); 
renderer.setUseFillPaint(true);

Область грофіка (plot) також управляє вісями діаграми. В прикладі, вісь значень модифікується так, щоб показувались лише цілі значення для міток шкали:

// change the auto tick unit selection to integer units only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

Існує також багато інших шляхів для модифікації діаграми, які можна знайти в різноманітних прикладах та документації.

7.2.5 Повний код програма

Далі наведений повний джерельний код демонстраційної програми.

 
// -------------------
// LineChartDemo1.java
// -------------------
// (C) Copyright 2002-2005, by Object Refinery Limited.
//
//

package demo;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;

import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;
/**
* A simple demonstration application showing how to create a line chart using
* data from a {@link CategoryDataset}.
*/
public class LineChartDemo1 extends ApplicationFrame {
/**
* Creates a new demo.
*
* @param title the frame title.
*/
public LineChartDemo1(String title) {
    super(title);
    CategoryDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(500, 270));
    setContentPane(chartPanel);
}
/**
* Creates a sample dataset.
*
* @return The dataset.
*/
private static CategoryDataset createDataset() {
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   dataset.addValue(212, "Classes", "JDK 1.0");
   dataset.addValue(504, "Classes", "JDK 1.1");
   dataset.addValue(1520, "Classes", "SDK 1.2");
   dataset.addValue(1842, "Classes", "SDK 1.3");
   dataset.addValue(2991, "Classes", "SDK 1.4");
   return dataset;
}
/**
* Creates a sample chart.
*
* @param dataset a dataset.
*
* @return The chart.
*/

private static JFreeChart createChart(CategoryDataset dataset) {
   // create the chart...
    JFreeChart chart = ChartFactory.createLineChart(
    "Java Standard Class Library", // chart title
    "Release", // domain axis label
    "Class Count", // range axis label
    dataset, // data
    PlotOrientation.VERTICAL, // orientation
    false, // include legend
    true, // tooltips
    false // urls
);
chart.addSubtitle(new TextTitle("Number of Classes By Release"));
TextTitle source = new TextTitle(
    "Source: Java In A Nutshell (4th Edition) "
    + "by David Flanagan (O’Reilly)"
);
source.setFont(new Font("SansSerif", Font.PLAIN, 10));
source.setPosition(RectangleEdge.BOTTOM);
source.setHorizontalAlignment(HorizontalAlignment.RIGHT);
chart.addSubtitle(source);
chart.setBackgroundPaint(Color.white);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.white);

// customise the range axis...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// customise the renderer...
LineAndShapeRenderer renderer
= (LineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
renderer.setFillPaint(Color.white);
return chart;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
    JFreeChart chart = createChart(createDataset());
    return new ChartPanel(chart);
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
    LineChartDemo1 demo = new LineChartDemo1("Line Chart Demo");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
}
} 
 
 

 7.3 Лінійні діаграми засновані на XYDataset
 
Графіки засновані на XYDataset з’єднують кожну (х,y) точку прямою лінією. В даному розділі представлена показова програма, яка генерує діаграму показану на рисунку 7.2


Рисунок 7.2 – Показова діаграма, що використовує XYPlot

Повний джерельний код (LineChartDemo2.java) доступний для завантаження разом з JFreeChart Developer Guide.

7.3.2 Набір даних 

Для даної діаграми використано XYSeriesCollection (ви можете використовувати будь-яку реалізацію інтерфейсу XYDataset). Даний набір даних створений наступним чином:
 
XYSeries series1 = new XYSeries("First");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeries series2 = new XYSeries("Second");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);
XYSeries series3 = new XYSeries("Third");
series3.add(3.0, 4.0);
series3.add(4.0, 3.0);
series3.add(5.0, 2.0);
series3.add(6.0, 3.0);
series3.add(7.0, 6.0);
series3.add(8.0, 3.0);
series3.add(9.0, 4.0);
series3.add(10.0, 3.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);
return dataset;

Зауважте, що кожна серія даних (series) має не тільки y-значення, а й х-значення і не залежить від інших серій. Набір даних також може прийняти null для y-значень. Коли в наявності null, об'єднувальна лінія не малюється, результатом є переривчаста лінія серії.

7.3.3 Конструювання діаграми

Метод createXYLineChart() класу ChartFactory надає зручний спосіб створення діаграми:
 
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Demo 2", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);

Даний метод створює JFreeChart об’єкт з заголовком, легендою та область побудови діаграми з відповідними осями та візуалізатором. Набір даних той же що створений в попередньому пункті. Діаграма створена з легендою та підказками (URL оголошено нечинним – даний атрибут використовується в створенні мап зображень HTML )

7.3.4 Модифікація діаграми

Графік ініціалізований налаштуваннями по замовчуванню для більшості атрибутів. Ви звичайно можете модифікувати будь-які налаштування та змінити зовнішній вигляд вашої діаграми. В даному прикладі, декілька атрибутів модифіковано:

• Фон діаграми
• Фон області побудови діаграми
• Зсув осей
• Колір ліній координатної сітки
• Модифіковано візуалізатор для оформлення точок даних
• Написи на шкалі осі  значень (range axis) змінюємо так, щоб відображалися лише цілі числа

Змінити фон діаграми просто:
 
// set the background color for the chart...
chart.setBackgroundPaint(Color.white);

Зміна ж фону області побудови діаграми, зсуву осей, кольору ліній сітки, вимагає отримання посилання на область побудови (plot). Також необхідне приведення типу до XYPlot, щоб отримати доступ до методів даного типу:

 
// get a reference to the plot for further customisation...
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);

Для оформлення точок, модифікуємо візуалізатор
 
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);

Фінальна модифікація – це зміна осі значень (range axis). Та підписи на шкалі (tick units) осі значень:
 
// change the auto tick unit selection to integer units only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

Зверніться до джерельного коду та документації для ознайомлення з іншими можливостями по зміні.

7.3.5 Повний код програми
Далі наведено повний код демонстраційної програми:
 
//
// -------------------
// LineChartDemo2.java
// -------------------
// (C) Copyright 2002-2005, by Object Refinery Limited.
//
//
package demo;
import java.awt.Color;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
/**
* A simple demonstration application showing how to create a line chart using
* data from an {@link XYDataset}.
* * IMPORTANT NOTE: THIS DEMO IS DOCUMENTED IN THE JFREECHART DEVELOPER GUIDE.
* DO NOT MAKE CHANGES WITHOUT UPDATING THE GUIDE ALSO!!
*/
public class LineChartDemo2 extends ApplicationFrame {
    /**
    * Creates a new demo.
    *
    * @param title the frame title.
    */
    public LineChartDemo2(String title) {
        super(title);
        XYDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }
    /**
    * Creates a sample dataset.
    *
    * @return a sample dataset.
    */
    private static XYDataset createDataset() {
        XYSeries series1 = new XYSeries("First");
        series1.add(1.0, 1.0);
        series1.add(2.0, 4.0);

        series1.add(3.0, 3.0);
        series1.add(4.0, 5.0);
        series1.add(5.0, 5.0);
        series1.add(6.0, 7.0);
        series1.add(7.0, 7.0);
        series1.add(8.0, 8.0);
        XYSeries series2 = new XYSeries("Second");
        series2.add(1.0, 5.0);
        series2.add(2.0, 7.0);
        series2.add(3.0, 6.0);
        series2.add(4.0, 8.0);
        series2.add(5.0, 4.0);
        series2.add(6.0, 4.0);
        series2.add(7.0, 2.0);
        series2.add(8.0, 1.0);
        XYSeries series3 = new XYSeries("Third");
        series3.add(3.0, 4.0);
        series3.add(4.0, 3.0);
        series3.add(5.0, 2.0);
        series3.add(6.0, 3.0);
        series3.add(7.0, 6.0);
        series3.add(8.0, 3.0);
        series3.add(9.0, 4.0);
        series3.add(10.0, 3.0);
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series1);
        dataset.addSeries(series2);
        dataset.addSeries(series3);
        return dataset;
    }
    /**
    * Creates a chart.
    *
    * @param dataset the data for the chart.
    *
    * @return a chart.
    */
    private static JFreeChart createChart(XYDataset dataset) {
        // create the chart...
        JFreeChart chart = ChartFactory.createXYLineChart(
            "Line Chart Demo 2", // chart title
            "X", // x axis label
            "Y", // y axis label
            dataset, // data
            PlotOrientation.VERTICAL,
            true, // include legend
            true, // tooltips
            false // urls
        );
        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
        chart.setBackgroundPaint(Color.white);
        // get a reference to the plot for further customisation...
        XYPlot plot = (XYPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        XYLineAndShapeRenderer renderer
        = (XYLineAndShapeRenderer) plot.getRenderer();
        renderer.setShapesVisible(true);
        renderer.setShapesFilled(true);
        // change the auto tick unit selection to integer units only...
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        // OPTIONAL CUSTOMISATION COMPLETED.
        return chart;
    }

    /**
    * Creates a panel for the demo (used by SuperDemo.java).
    *
    * @return A panel.
    */
    public static JPanel createDemoPanel() {
        JFreeChart chart = createChart(createDataset());
        return new ChartPanel(chart);
    }
    /**
    * Starting point for the demonstration application.
    *
    * @param args ignored.
    */
    public static void main(String[] args) {
        LineChartDemo2 demo = new LineChartDemo2("Line Chart Demo 2");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
} 



The JFreeChart Developer Guide Version 1.0.9

Переклад volodimirg

Розділ 4 Використання JFreeChart


4.1 Загальний огляд

Даний розділ надає інформацію для простого вступу до JFreeChart та орієнтована на нових користувачів JFreeChart.

4.2 Створення вашої першої  діаграми
4.2.1 Загальний огляд

Створення діаграм з JFreeChart – це трьох-кроковий процес. Вам необхідно:
•    Створити набір даних (dataset), що міститиме дані для зображення в діаграмі
•    Створити об’єкт JFreeChart, що буде відповідати за промальовування діаграми
•    Намалювати діаграму на певній поверхні (частіше всього це панель на екрані, хоча і не завжди)
Щоб продемонструвати даний процес, ми для прикладу опишемо програму (First.java) що створює кругову діаграму зображену на рисунку 4.1

Рис. 4.1 ­- Кругова діаграма створена з використанням First.java

Кожен з трьох кроків, разом з джерельним кодом описані в наступних секціях.


4.2.2 Дані

Крок перший вимагає створення набору даних для нашої діаграми. Це може бути просто зроблено, використовуючи DefaultPieDataset клас, наступним чином:

// створюємо набір даних...
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Category 1", 43.2);
dataset.setValue("Category 2", 27.9);
dataset.setValue("Category 3", 79.5);

Зазначте, що JFreeChart може створити кругову діаграму використовуючи дані з будь-якого класу, що реалізовує інтерфейс PieDataset. Клас DefaultPieDataset, використаний вище, надає зручну реалізацію даного інтерфейсу, проте ви можете розробити додаткову реаліцію, якщо хочете[Все це подібне до того як клас Swing – JTable отримує дані через інтерфейс TableModel]

4.2.3 Створення кругової діаграми

Другий крок стосується того, як ми представимо набір даних створений в попередній секції. Нам необхідно створити JFreeChart об’єкт, що може намалювати діаграму, використовуючи дані з нашого набору для діаграми. Ми використаємо ChartFactory клас, таким чином:

// створюємо діаграму...
JFreeChart chart = ChartFactory.createPieChart(
"Sample Pie Chart",
dataset,
true, // legend?
true, // tooltips?
false // URLs?
);


Зазначте, як ми передали посилання на набір даних у метод createPieChart. JFreeChart отримав посилання на даний набір даних, тож тепер JFreeChart може отримати дані, при зображенні даграми.

Діаграма, що створюється нами використовує налаштування по замовчуванню для більшості атрибутів. Існує багато шляхів модифікації зовнішнього вигляду діаграми створеної з JFreeChart, проте в даному прикладі ми використаємо стандартний вигляд.

4.2.4 Вивід діаграми
 
Останнім кроком є зображення діаграми де-небудь. JFreeChart доволі гнучка, щодо місць промальовки діаграми, завдяки використаннню класу Graphics2D.

Так давайте зобразимо діаграму у фреймі на екрані. ChartFrame надає відповідний механізм (ChartPanel) для відображення діаграм:

// create and display a frame...
ChartFrame frame = new ChartFrame("Test", chart);
frame.pack();
frame.setVisible(true);

І на цьому все….

4.2.5 Повний код програми

Тут наведена повний текст програми, тож ви можете побачити, які пакети необхідно імпортувати і порядок розташування фрагментів коду поданих в попередніх секціях:

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class First {
/**
* The starting point for the demo.
*
* @param args ignored.
*/
public static void main(String[] args) {
 // create a dataset...
 DefaultPieDataset dataset = new DefaultPieDataset();
 dataset.setValue("Category 1", 43.2);
 dataset.setValue("Category 2", 27.9);
 dataset.setValue("Category 3", 79.5);
 // create a chart...
JFreeChart chart = ChartFactory.createPieChart(
  "Sample Pie Chart",
  dataset,
  true, // legend?
  true, // tooltips?
  false // URLs?
);
 // create and display a frame...
 ChartFrame frame = new ChartFrame("First", chart);
 frame.pack();
 frame.setVisible(true);
 }
}


Сподіваємося це переконало вас, що створювати і зображати графіки з JFreeChart нескладно. Звичайно, що тут є ще багато чого для освоєння…


The JFreeChart Developer Guide Version 1.0.9

Переклад volodimirg

четвер, 29 грудня 2011 р.

Cтворюємо графіки з допомогою JFreeChart

Декілька років назад довелося малювати графік в Java аплеті. Як виявилося не така вже й проста задача, особливо коли кількість даних постійно змінюється і розміри аплета теж. Тоді ж натрапив на безкоштовну бібліотеку JFreeChart, яка дозволяє малювати діаграми різного типу: графіки, стовпцеві діаграми, кругові і т.д. Зараз таких бібліотек доволі багато як безплатних так і платних. Платні переважно надають доволі непогану візуалізацію з ефектами об’ємності і т.п. JFreeChart дещо гірше промальовує графіку, але порівняно з іншими безкоштовними – це одна із найкращих, яка має багато засобів для модифікації вигляду графіку, виводу міток і написів над точками, масштабування осей та графіків тощо. Щоправда дещо заплутана документація. Існує також платний посібник розробника, який дещо детальніше описує процес створення. Багато прикладів можна знайти в Інтернеті і роз’яснень до них. Можна навіть скачати посібник до старіших версій бібліотеки.
Для використання JFreeChart необхідно скачати два jar файли JCommon та JFreChart з офіційного сайту. В інструкції по встановленню описано як можна підключити бібліотеки для використання разом з NetBeans та Eclipse. Також можна запустити демонстраційну програму, яка демонструє приклади готових графіків. Їхній код можна отримати разом з посібником. Багато прикладів програм можна знайти тут:  http://www.java2s.com/Code/Java/Chart/CatalogChart.htm
Алгоритм створення графіку простий:
1)    Створити набір даних (dataset)
2)    Створити об’єкт діаграми, який відповідатиме за вивід діаграми
3)    Додати графік на якусь графічну компоненту

Розглянемо як можна намалювати звичайний лінійний графік.  Їх можна створити засновуючись на двох типах даних, які базуються на інтерфейсах CategoryDataset та XYDataset.
Перший вид графіків передбачає, що на одній з осей будуть знаходитись цифрові значення, а на іншій текстові значення (категорії).
JFreeChart, Chart on Java
Другий тип передбачає, що і по X та по Y знаходяться числові значення. Саме такий ми будемо будувати.
Існують також можливість створення часових діаграм, на яких одна з осей представляє собою час. Дані графіки базують на XYDataset .
Вибір типу діаграми визначає які класи будуть застосовуватись при її створенні і відповідно, які методи будуть  доступні для роботи з даною діаграмою.
Далі наведений приклад програми, що малює два графіки на одній області.
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class FirstXYChart {
public static void main(String[] args) {

 JFrame frame = new JFrame(); //створюємо каркас вікна
 frame.setTitle("Графік");    //заголовок вікна
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 //створюємо 1 ряд даних
 XYSeries series = new XYSeries("Ряд1 1");
 //додаємо точки на графіку
   series.add(1, 11);
   series.add(2, 12);
   series.add(3, 13);
   series.add(4, 14);
   series.add(5, 15);
   series.add(6, 16);
   series.add(7, 17);
   series.add(8, 58);
   series.add(9, 19);
   series.add(10, 11);

//створюємо 2 ряд даних
XYSeries series2 = new XYSeries("Ряд1 2");
   series2.add(2, 1);
   series2.add(2, 3);
   series2.add(4, 3);
   series2.add(4, 5);
   series2.add(6, 7);
   series2.add(6, 8);
   series2.add(9, 7);
   series2.add(8, 28);
   series2.add(13, 9);
   series2.add(12, 12);

// зразу ж додаємо ряд в набір даних
XYSeriesCollection data = new XYSeriesCollection(series);
data.addSeries(series2); // додаємо другий ряд в набір
//створюємо діаграму
final JFreeChart chart = ChartFactory.createXYLineChart(
  "XY Series Example",
  "X",
  "Y",
  data,
  PlotOrientation.VERTICAL,
  true,
  true,
  false
);

 //створюємо панель для графіка
 final ChartPanel chartPanel = new ChartPanel(chart);
 //встановлюємо розмір графіка
 chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
 //додаємо панель на створений нами фрейм
 frame.setContentPane(chartPanel);
 //підганяємо розміри фрейму
 frame.pack();
 //робимо усе видимим
 frame.setVisible(true);
 }
}
Результат:
JFreeChart, Chart on Java, Plot
Практично схожим чином можна створювати і інші типи діаграм.
Модифікація діаграм
В JFreeChart також передбачені широкі можливості по зміні зовнішнього вигляду діаграми.
Наприклад, змінюємо фон:
XYPlot plot=chart.getXYPlot();         // одержати область побудови діаграми
plot.setBackgroundPaint(Color.CYAN);   // встановлюємо колір

Крім задання кольору, можна поставити як фон певне зображення.
Якщо хочемо змінити колір кривих:
XYItemRenderer renderer=plot.getRenderer();  //отримати візуалізатор(рендерер)
renderer.setSeriesPaint(0, Color.darkGray);  // задаємо колір першого графіка
renderer.setSeriesPaint(1, Color.GREEN);     // задаємо колір другого графіка

Можна також задавати мітки на графіки, вигляд точок і т.п. З усім можна розібратись по документації та наявних в інтернеті прикладах.