Tworzenie wykresów

Obiekty wykresu

Wszystkie możliwości wykresów są dostępne po utworzeniu obiektu wykresu. Wykres tworzony jest przez określenie odpowiedniego typu (ScatterPlot, LinePlot, itd). Informacja na temat danych przekazywana jest jako argument do konstruktora obiektu. Zobacz, aby uzyskać więcej informacji na temat typów wykresów.

Obiekt wykresu tworzony jest przez konstruktor wykresu wybranego typu klasy. Składnia konstruktora wygląda następująco:

PlotType(dataObject)

gdzie PlotType powinien być zastąpiony nazwą odpowiedniej klasy wykresu. Parametr dataObject określa obiekt danych, który powinien zostać użyty do utworzenia wykresu.

Metody obiektu wykresu

Dla każdego obiektu wykresu dostępne są następujące metody:

Tabela 11.1. Metody dla obiektu wykresu

nazwa metody oraz składniaopis
show()
Tworzy okno wykresu dla wcześniej określonych danych
setTitle(name)
ustawia tytuł okna wykresu
getTitle()
zwaraca tytuł okna wykresu
getJFreeChart()
Zwraca powiązany obiekt klasy org.jfree.chart.plot.Plot, który może być wykorzystany do rozszerzonej edycji ustawień wykresu. Aby uzyskać szczegółowe informacje zobacz dokumentację klasy Plot.

Przykład 11.7. Przygotowanie danych oraz wyświetlanie wykresu punktowego

d = Data('tableName', ['x', 'y'] )
ScatterPlot(d).show()
                

Obiekt danych d może także być użyteczny do tworzenia innych wykresów.

Istnieje także prostszy sposób tworzenia wykresów ad-hoc. Jest to podstawowy i wygodny sposób tworzenia pojedynczych wykresów, bez tworzenia obiektu Data.

Przykład 11.8. Tworzenie wykresu punktowego ad-hoc

ScatterPlot('tableName', ['x', 'y']).show()
                

Dane wykresu z tego przykładu nie mogą być ponownie użyte.

Typy wykresów

Podstawowe trzy typy wykresów opisane są poniżej.

Typ 1 - wykresy 2D

Klasy

Następujące klasy wykresów 2D mogą zostać użyte:

  • ScatterPlot
  • LinePlot

Przygotowanie danych

Składnia konstruktora Data dla użycia wykresów 2D jest następująca:

Data(tableName, [x_column, y_column])

lub

Data(tableName, [series_column_name, x_column, y_column])

Tabela 11.2. Opis parametrów konstruktora danych dla wykresów 2D

Parametr Opis
series_name_columnNazwa zawierająca nazwy serii do których należą pary współrzędnych
x_columnNazwa kolumny z wartościami współrzędnych x
y_columnNazwa kolumny z wartościami współrzędnych y

Przykład 11.9. Tworzenie wykresu 2D

table 'scatter_plot':
    s  x     y
    a  0     0
    b  0     0.5
    a  0.5   0.25
    b  0.5   1
    a  1     1
    a  1.5   2.25
    b  1     1.5
    b  1.5   2
    a  2     4
    b  2     2.5

d = Data('scatter_plot', ['s', 'x', 'y'])
ScatterPlot(d).show()         
    

Rysunek 11.9. 2 series scatter plot

2 series scatter plot

Typ 2 - wykresy 3D

Klasy

Następujące klasy wykresów 3D mogą zostać użyte:

  • BubblePlot

Przygotowanie danych

Składnia konstruktora Data dla użycia wykresów 3D jest następująca:

Data(tableName, [x_column, y_column, z_column])

lub

Data(tableName, [series_column_name, x_column, y_column, z_column])

Tabela 11.3. Opis parametrów konstruktora danych dla wykresów 3D

Parametr Opis
series_name_columnNazwa zawierająca nazwy serii do których należą pary współrzędnych
x_columnNazwa kolumny z wartościami współrzędnych x
y_columnNazwa kolumny z wartościami współrzędnych y
z_columnNazwa kolumny z wartościami współrzędnych z

Przykład 11.10. Creating a bubble plot

table 'bubble_plot':
    x    y    z
    1    2    0.3
    1.5  1.5  0.5
    2    1    0.1
    2.5  2.7  0.2
    3    3    0.2
    3.5  1.8  0.4
    4    2    0.15

d = Data('bubble_plot', ['x', 'y', 'z'])
BubblePlot(d).show()       
    

Rysunek 11.10. Bubble plot

Bubble plot

Typ 3 - wykresy danych nominalnych

Klasy

Następujące klasy wykresów mogą zostać użyte z danymi nominalnymi:

  • CategoryPlot (wykres słupkowy)
  • PiePlot
  • ScatterCategory3DPlot (wymaga zainstalowanej Java3D)
  • LineCategory3DPlot (wymaga zainstalowanej Java3D)
  • Bar3DPlot (wymaga zainstalowanej Java3D)
  • Pie3DPlot (wymaga zainstalowanej Java3D)

Przygotowanie danych

Składnia konstruktora Data dla użycia wykresów danych nominalnych 3D jest następująca:

Data(tableName, [group_name_column, numeric_value_column])

Tabela 11.4. Opis parametrów konstruktora danych dla wykresów 3D

Parametr Opis
group_name_column Nazwa kolumny zawierająca nazwy grup
numeric_values_column Nazwa kolumny z wartościami każdej grupy

Przykład 11.11. Creating a category plot

table 'category_plot':
    c2        c3
    'high'    55
    'high'    32
    'high'    40
    'medium'  24
    'medium'  28
    'medium'  20
    'low'      4
    'low'      8
    'low'     11

d = Data('category_plot', ['c2', 'c3'])
CategoryPlot(d).show()     
    

Rysunek 11.11. Category plot

Category plot

Grupowanie wykresów

Możliwe jest zobrazowanie więcej niż jednego wykresu na tym samym wykresie z wspólnymi osiami x oraz y. Zakres wspólnych osi zostanie ustawiony aby wyświetlić wszystkie wartości z zgrupowanych wykresów.

Możliwe jest grupowanie poziome (horyzontalne – wspólna oś x) podobnie jak pionowe (wertykalne – wspólna oś y)

Składnia:

CombinedVerticalXYPlot(xyplot1, xyplot2, ..., xyplotN)

CombinedHorizontalXYPlot(xyplot1, xyplot2, ..., xyplotN)

Przykład 11.12. Grouping plots

table 'table_A':
    a1  a2
    1   2
    3   4
                    
table 'table2':
    x   y
    1   2
    3   4
    
p1 = ScatterPlot('table_A', ['a1', 'a2'])
p2 = LinePlot('table2', ['x', 'y'] )
CombinedVerticalXYPlot(p1, p2).show()
    

Rysunek 11.12. Grouped plots

Grouped plots

Zagadnienia dodatkowe

Podrozdział ten opisuje niektóre użyteczne funkcjonalności interfejsu JFreeChart.

Oś logarytmiczna

Klasa JFreeChart dostarcza mechanizm użycia osi logarytmicznych. Biblioteka dostarcza implementację BetterLogarithmic bezpośrednio funkcją BetterLogarithmicAxis.

Przykład 11.13. Creating a plot with a logarithmic axis

table 'table_1':
    a1  a2
    1   2
    3   4

chartObject = ScatterPlot('table_1', ['a1', 'a2'])
chartObject.getJFreeChart().getPlot().setDomainAxis(BetterLogarithmicAxis('axis_name'))
chartObject.show()
    

Uwaga

Osie logarytmiczne wymagają wartości dodatnie danych.

Znaczniki

Poniżej znajduje się przykład jak dodać pionowy znacznik etykiety 'marker_label'

                        table 'table':
                        a1  a2
                        1   2
                        3 4
chartObject = ScatterPlot('table', ['a1', 'a2'])
plot = chartObject.getJFreeChart().getPlot()
m = org.jfree.chart.plot.ValueMarker(2)
m.label = 'marker_label'
plot.addDomainMarker(m)
chartObject.show()
                    

Zobacz także: org.jfree.chart.demo.MarkerDemo1.java