410013796724260
• Webmoney
R335386147728
Z369087728698
Столбчатые диаграммы Bar ChartsБиблиотека JFreeChart позволяет создавать и настраивать интерфейс столбчатых диаграмм Bar Chart, иначе называемых гистограммами. Чтобы понять, как создавать диаграммы Bar Chart рассмотрим создание составных элементов и диаграммы в целом : // Создание осевых объектов диаграммы CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel); ValueAxis valueAxis = new NumberAxis (valueAxisLabel ); // Создание визуализатора (renderer) BarRenderer renderer = new BarRenderer(); // Создание объекта графической части диаграммы, plot'a CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer); plot.setOrientation(orientation); // Создание диаграммы JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULTTITLEFONT, plot, legend); Диаграмма Bar Chart имеет две оси : ось категорий объектов и ось их числовых значений. CategoryAxis определяет объекты набора данных, а NumberAxis используется для определения числовых значений объектов. Визуализатор отвечает за прорисовку (отображение) каждого объекта (столбца) на диаграмме. Набор данных dataset, осевые объекты и визуализатор используются для создания объекта CategoryPlot. Его метод setOrientation позволяет определить ориентацию столбцов. Заголовок title, plot и объект легенды необходимы для создания диаграммы JFreeChart. Процесс создания диаграммы Bar Chart можно упростить, используя методы утилиты ChartFactory. Методы создания Bar ChartУтилита ChartFactory включает несколько статических методов создания круговых диаграмм Bar Chart : public static JFreeChart createBarChart (String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset); JFreeChart createBarChart (String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls); JFreeChart createBarChart3D(String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset); JFreeChart createBarChart3D(String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls); JFreeChart createStackedBarChart (String title, String domainAxisLabel, String rangeAxisLabel, CategoryDataset dataset); JFreeChart createStackedBarChart (String title, String domainAxisLabel, String rangeAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls); JFreeChart createStackedBarChart3D(String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset); JFreeChart createStackedBarChart3D(String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls); Можно сказать, что статические перегруженные методы создания столбчатых диаграмм включают либо минимальный набор параметров (заголовок title, метка оси domainAxisLabel, метка оси rangeAxisLabel и набор данных dataset), либо полный (к минимальному набору добавляются ориентация столбцов orientation, флаг отображения легенды legend, флаг вывода подсказки tooltips и флаг отображения urls). Полосковая диаграмма (Stacked Bar Chart) позволяет отображать с помощью полос значения нескольких параметров и является разновидностью обычной Bar Chart. Ниже представлен пример создания полосковой диаграммы BarChartStacked.java Настройка цветаФоновй цвет диаграммы и plot'a можно изменить используя метод setBackgroundPaint(Color). Для определения цвета сетки используются методы setDomainGridlinePaint(Color) и setRangeGridlinePaint (Color). // Определение фона диаграммы chart.setBackgroundPaint(Color.white); // Определение фона plot'а CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint(new Color(212, 212, 248)); // Определение цвета сетки plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint (Color.white); Настройка визуализатора, BarRendererВизуализатор BarRenderer можно получить из диаграммы JFreeChart или создать. BarRenderer renderer = new BarRenderer(); // или BarRenderer renderer = (BarRenderer)chart.getPlot().getRenderer(); Ниже в примерах можно увидеть использование нескольких типов визуализаторов (LayeredBarRenderer, GroupedStackedBarRenderer), наследующих свойства класса AbstractRenderer. Определение цвета столбцовrenderer.setSeriesPaint(0, Color.gray); renderer.setSeriesPaint(1, Color.orange); renderer.setDrawBarOutline(false); Метод setSeriesPaint(index, Color) определен в абстрактом класса AbstractRenderer, и его можно использовать для всех типов renderer. Определение расстояния между столбцамиРасстояние между столбцами определяется методом setItemMargin(). renderer.setItemMargin(0.0); Примеры диаграмм Bar ChartРассмотрим 6 примеров создания столбчатых диаграмм Bar Chart с настройкой различных параметров :
Исходные коды примеров желающие могут скачать в конце страницы. Методы формирования наборов данных для диаграмм вынесены в отдельный модуль Dataset.java. Таким образом, исходные данные отделены от интерфейса диаграмм для облегчения восприятия кодов. Листинг Dataset.javaДиаграммы Bar Chart используют наборы данных типа CategoryDataset. Модуль Dataset.java включает 3 метода формирования различных наборов данных. Методы createDataset1 и createDataset3 представлены в сокращенном виде. import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DatasetUtilities; public class Dataset { private static final double[][] data = new double[][] { {12.0, 29.0, 36.0, 64.0, 58.0, 79.0, 70.0, 92.0}, {49.0, 72.0, 74.0, 68.0, 88.0, 54.0, 38.0, 23.0}, {41.0, 33.0, 22.0, 34.0, 62.0, 32.0, 42.0, 34.0} }; public static CategoryDataset createDataset1() { DefaultCategoryDataset dataset; // row keys... final String series1 = "Чай" ; final String series2 = "Кофе" ; final String series3 = "Коктейль"; // column keys... final String category1 = "Январь" ; final String category2 = "Февраль"; . . . dataset = new DefaultCategoryDataset(); dataset.addValue(3.1, series1, category1); . . . return dataset; } public static CategoryDataset createDataset2() { return DatasetUtilities.createCategoryDataset("Series ", "Factor ", data); } public static CategoryDataset createDataset3() { DefaultCategoryDataset result = new DefaultCategoryDataset(); result.addValue(16.1, "Чай (Офис 1)" , "Январь" ); result.addValue(28.2, "Чай (Офис 1)" , "Февраль"); . . . result.addValue(29.5, "Кофе (Офис 1)" , "Январь" ); result.addValue(27.4, "Кофе (Офис 1)" , "Февраль"); . . . result.addValue(16.7, "Коктейль (Офис 1)", "Январь" ); result.addValue(29.8, "Коктейль (Офис 1)", "Февраль"); . . . return result; } } Пример BarChart.javaВ примере BarChart.java изменим цвет фона plot'а и цвет линий сетки, повернем значения меток на 45° Интерфейс примера представлен на следующем скриншоте. Листинг BarChart.javaЦвет фона диаграммы и plot'а настраивается методом setBackgroundPaint. Чтобы изменить цвет линий сетки используются методы setDomainGridlinePaint и setRangeGridlinePaint. Для поворота меток значений используется метод setCategoryLabelPositions с параметром CategoryLabelPositions.UP_45. Чтобы повернуть метки на 90° необходимо использовать значение UP_90. import java.awt.Color; import java.awt.Dimension; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; public class BarChart extends ApplicationFrame { private static final long serialVersionUID = 1L; public BarChart(final String title) { super(title); CategoryDataset dataset = Dataset.createDataset1(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(480, 320)); setContentPane(chartPanel); } private JFreeChart createChart(final CategoryDataset dataset) { final JFreeChart chart = ChartFactory.createBarChart( "Потребление напитков", // chart title "Месяц", // domain axis label "Объем", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips false // urls ); // Определение фона диаграммы chart.setBackgroundPaint(Color.white); // Настройка plot'а CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint (new Color(212, 212, 248)); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint (Color.white); // Настройка значений меток NumberAxis // (только целочисленные значения) NumberAxis axis = (NumberAxis) plot.getRangeAxis(); axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); axis.setUpperMargin(0.15); CategoryAxis axis_d = plot.getDomainAxis(); axis_d.setCategoryLabelPositions(CategoryLabelPositions.UP_45); return chart; } public static void main(final String[] args) { final BarChart demo = new BarChart("Bar Chart"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Пример BarChart3d.javaВ примере BarChart3d.java изменим цвет фона plot'а и цвет линиц сетки, повернем значения меток на 30°. Интерфейс примера представлен на следующем скриншоте. Отличия от предыдущего примера связаны с эффектом 3d, углом поворота меток значений и скрытием осевых линий и меток делений DomainAxis. Листинг BarChart3d.javaЧтобы повернуть метки значений на произвольный угол необходимо использовать метод createUpRotationLabelPositions(angle). Угол angle (измеряемый в радианах), на который можно повернуть метки, должен быть меньше 90° (< Math.PI / 2.0). public class BarChart3D extends ApplicationFrame { private static final long serialVersionUID = 1L; public BarChart3D(final String title) { super(title); final CategoryDataset dataset = Dataset.createDataset1(); final JFreeChart chart = createChart(dataset); final ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); setContentPane(chartPanel); } private JFreeChart createChart(final CategoryDataset dataset) { final JFreeChart chart = ChartFactory.createBarChart3D( "Потребление напитков", // chart title "Месяц", // domain axis label "Объем", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips false // urls ); // Определение фона plot'a CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint (new Color(212, 212, 248)); // Настройка CategoryAxis CategoryAxis axis = plot.getDomainAxis(); // Скрытие осевых линий и меток делений axis.setAxisLineVisible (false); // осевая линия axis.setTickMarksVisible(false); // метки деления оси // Наклон меток значений axis.setCategoryLabelPositions( CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0) ); CategoryItemRenderer renderer = plot.getRenderer(); renderer.setBaseItemLabelsVisible(true); BarRenderer r = (BarRenderer) renderer; r.setMaximumBarWidth(0.05); return chart; } public static void main(final String[] args) { final BarChart3D demo = new BarChart3D("3D Bar Chart"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Пример BarChartVertical.javaВ примере BarChartVertical.java изменим цвет диаграммы и фона plot'а, цвет линиц сетки и удалим осевые линии и метки делений DomainAxis. Интерфейс примера представлен на следующем скриншоте. Листинг BarChartVertical.javaДля изменения цвета диаграммы и фонового цвета plot'a используется метод setBackgroundPaint. Цвет сетки определяется методом setRangeGridlinePaint. Осевая линия и метки делений удаляются методами setAxisLineVisible и setTickMarksVisible. Вертикальное расположение столбцов определяется параметров PlotOrientation.VERTICAL. import java.awt.Color; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.chart.axis.Axis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.AxisLocation; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.data.category.CategoryDataset; public class BarChartVertical extends ApplicationFrame { private static final long serialVersionUID = 1L; private static final String TITLE = "Bar Chart вертикальный"; public BarChartVertical(final String title) { super(title); CategoryDataset dataset = Dataset.createDataset2(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(560, 320)); setContentPane(chartPanel); } private JFreeChart createChart(final CategoryDataset dataset) { final JFreeChart chart = ChartFactory.createBarChart( TITLE, // chart title null, // domain axis label "Значение, %", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, false); // Определение фона диаграммы chart.setBackgroundPaint(new Color(232, 224, 224)); // Настройка plot'а final CategoryPlot plot = chart.getCategoryPlot(); // Фон plot'a plot.setBackgroundPaint (new Color(248, 248, 232)); // Линии шкалы деления plot.setRangeAxisLocation (AxisLocation.BOTTOM_OR_LEFT); plot.setRangeGridlinePaint (Color .lightGray ); // Настройка значений меток NumberAxis (только целочисленные значения) final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange(0.0, 100.0); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // Удаляем из диаграммы осевую линию и метки делений Axis axis = plot.getDomainAxis(); axis.setAxisLineVisible(false); // осевая линия axis.setTickMarksVisible(false); // метки деления оси return chart; } public static void main(final String[] args) { final BarChartVertical demo = new BarChartVertical(TITLE); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Пример BarChartHorizontal.javaВ примере BarChartHorizontal.java изменим цвет диаграммы и фона plot'а, определим цвет линиц сетки и удалим осевые линии. Интерфейс примера представлен на следующем скриншоте. Листинг BarChartHorizontal.javaДля изменения цвета диаграммы и фонового цвета plot'a используется метод setBackgroundPaint. Цвет сетки определяется методом setRangeGridlinePaint. Осевые линии удаляются методом setAxisLineVisible. Смещение осевых меток определяется методом setAxisOffset. Горизонтальное расположение столбцов определяется параметров PlotOrientation.HORIZONTAL. public class BarChartHorizontal extends ApplicationFrame { private static final long serialVersionUID = 1L; private static final String TITLE = "Bar Chart горизонтальный"; public BarChartHorizontal(final String title) { super(title); CategoryDataset dataset = Dataset.createDataset2(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(560, 360)); setContentPane(chartPanel); } private JFreeChart createChart(final CategoryDataset dataset) { final JFreeChart chart = ChartFactory.createBarChart( TITLE, // chart title null , // domain axis label "Score, %", // range axis label dataset , // data PlotOrientation.HORIZONTAL, // orientation true, // include legend true, false); chart.setBackgroundPaint(new Color(236, 236, 236)); // get a reference to the plot for further customisation... CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint (new Color(248, 248, 248)); // Определение отступа меток делений plot.setAxisOffset(new RectangleInsets (1.0, 1.0, 1.0, 1.0)); plot.setRangeAxisLocation (AxisLocation.BOTTOM_OR_LEFT); plot.setRangeGridlinePaint (Color .lightGray ); // Определение цвета столбцов диаграммы plot.getRenderer().setSeriesPaint(0, new Color( 0, 0, 255)); plot.getRenderer().setSeriesPaint(1, new Color( 75, 75, 255)); plot.getRenderer().setSeriesPaint(2, new Color(150, 150, 255)); // change the auto tick unit selection to integer units only... NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange(0.0, 100.0); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // Удаляем из диаграммы осевые линии Axis axis = plot.getRangeAxis(); axis.setAxisLineVisible(false); axis = plot.getDomainAxis(); axis.setAxisLineVisible(false); return chart; } public static void main(final String[] args) { final BarChartHorizontal demo = new BarChartHorizontal(TITLE); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Пример BarChartLayered.javaВ примере BarChartLayered.java совместим представление значений разных объектов в одном столбце и удалим осевые линии. Интерфейс примера представлен на следующем скриншоте. Листинг BarChartLayered.javaДля создания слоеной диаграммы используется объект типа LayeredBarRenderer, у которого необходимо настроить ширину столбцов. Для этого вызывается метод setSeriesBarWidth с идентификатором столбца (отсчет от 0) и шириной столбца (1 соответствует 100%). Для настройки параметров осевой линии domainAxis используются методы setCategoryMargin, setUpperMargin и setLowerMargin, позволяющие сжимать и разжимать столбцы, а также смещать их вправо и влево. import java.awt.Color; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.chart.renderer.category.LayeredBarRenderer; public class BarChartLayered extends ApplicationFrame { private static final long serialVersionUID = 1L; public BarChartLayered(final String title) { super(title); CategoryDataset dataset = Dataset.createDataset2 (); CategoryAxis categoryAxis = new CategoryAxis("Category"); ValueAxis valueAxis = new NumberAxis ("Score, %"); LayeredBarRenderer renderer = new LayeredBarRenderer (); CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer); plot.setOrientation(PlotOrientation.VERTICAL); JFreeChart chart = new JFreeChart( "Layered Bar Chart", JFreeChart.DEFAULT_TITLE_FONT, plot, true ); chart.setBackgroundPaint(new Color(232, 232, 232)); // Индивидуальная настройка каждого столбца // Ширина столбца (в %) определяется значением от 0 до 1 renderer.setSeriesBarWidth(0, 1.0); renderer.setSeriesBarWidth(1, 0.6); renderer.setSeriesBarWidth(2, 0.3); renderer.setItemMargin(0.01); final CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setCategoryMargin(0.25); domainAxis.setUpperMargin(0.05); domainAxis.setLowerMargin(0.05); // Размещение диаграммы на панели ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(540, 270)); setContentPane(chartPanel); } public static void main(final String[] args) { BarChartLayered demo = new BarChartLayered("Layered Bar Chart"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Пример BarChartStacked.javaВ примере создания полосковой диаграммы BarChartStacked.java используем градиентную заливку столбцов и создадим легенду. Интерфейс примера представлен на следующем скриншоте. Листинг BarChartStacked.javaВ качестве градиентной заливки используется класс GradientPaint (float x1, float y1, Color color1, float x2, float y2, Color color2). Цвета заливки вынесены в отдельные массивы, чтобы можно было их согласовать с легендой. Легенда диаграммы представляет собой коллекцию типа LegendItemCollection. При создании легенды в методе createLegendItems() необходимо согласовать наименование объекта и цвет представления его значения на диаграмме. import java.awt.Color; import java.awt.GradientPaint; import java.awt.Paint; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.LegendItem; import org.jfree.chart.LegendItemCollection; import org.jfree.chart.axis.SubCategoryAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.KeyToGroupMap; import org.jfree.data.category.CategoryDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.ui.GradientPaintTransformType; import org.jfree.ui.StandardGradientPaintTransformer; import org.jfree.chart.renderer.category.GroupedStackedBarRenderer; public class BarChartStacked extends ApplicationFrame { private static final long serialVersionUID = 1L; private static final String TITLE = "Stacked Bar Chart"; private final Color COLOR_1 = new Color(0x32, 0x32, 0xFF); private final Color COLOR_2 = new Color(0x32, 0xFF, 0x32); private final Color COLOR_3 = new Color(0xFF, 0x32, 0x32); private final Color COLOR_4 = new Color(0xFF, 0xFF, 0x32); private final Color COLOR_1_ = new Color(0x96, 0x96, 0xFF); private final Color COLOR_2_ = new Color(0x96, 0xFF, 0x96); private final Color COLOR_3_ = new Color(0xFF, 0x96, 0x96); private final Color COLOR_4_ = new Color(0xFF, 0xFF, 0x96); public BarChartStacked(final String title) { super(title); CategoryDataset dataset = Dataset.createDataset3(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(590, 350)); setContentPane(chartPanel); } private GradientPaint createGradientPaint(Color color1,Color color2) { return new GradientPaint(0.0f,0.0f, color1, 0.0f,0.0f, color2); } private JFreeChart createChart(final CategoryDataset dataset) { SubCategoryAxis domainAxis; GroupedStackedBarRenderer renderer; final JFreeChart chart = ChartFactory.createStackedBarChart( TITLE , // chart title "Category", // domain axis label null , // range axis label dataset , // data PlotOrientation.VERTICAL, // the plot orientation true, // legend true, // tooltips false // urls ); KeyToGroupMap map = new KeyToGroupMap("G1"); map.mapKeyToGroup("Чай (Офис 1)", "G1"); map.mapKeyToGroup("Чай (Офис 2)", "G1"); map.mapKeyToGroup("Чай (Офис 3)", "G1"); map.mapKeyToGroup("Чай (Офис 4)", "G1"); map.mapKeyToGroup("Кофе (Офис 1)", "G2"); map.mapKeyToGroup("Кофе (Офис 2)", "G2"); map.mapKeyToGroup("Кофе (Офис 3)", "G2"); map.mapKeyToGroup("Кофе (Офис 4)", "G2"); map.mapKeyToGroup("Коктейль (Офис 1)", "G3"); map.mapKeyToGroup("Коктейль (Офис 2)", "G3"); map.mapKeyToGroup("Коктейль (Офис 3)", "G3"); map.mapKeyToGroup("Коктейль (Офис 4)", "G3"); renderer = new GroupedStackedBarRenderer(); renderer.setSeriesToGroupMap(map); renderer.setItemMargin(0.0); Paint p1 = createGradientPaint(COLOR_1, COLOR_1_); renderer.setSeriesPaint(0, p1); renderer.setSeriesPaint(4, p1); renderer.setSeriesPaint(8, p1); Paint p2 = createGradientPaint(COLOR_2, COLOR_2_); renderer.setSeriesPaint(1, p2); renderer.setSeriesPaint(5, p2); renderer.setSeriesPaint(9, p2); Paint p3 = createGradientPaint(COLOR_3, COLOR_3_); renderer.setSeriesPaint(2, p3); renderer.setSeriesPaint(6, p3); renderer.setSeriesPaint(10, p3); Paint p4 = createGradientPaint(COLOR_4, COLOR_4_); renderer.setSeriesPaint(3, p4); renderer.setSeriesPaint(7, p4); renderer.setSeriesPaint(11, p4); renderer.setGradientPaintTransformer( new StandardGradientPaintTransformer( GradientPaintTransformType.HORIZONTAL) ); domainAxis = new SubCategoryAxis("Напитки / Месяц"); domainAxis.setCategoryMargin(0.25); domainAxis.addSubCategory("Чай" ); domainAxis.addSubCategory("Кофе" ); domainAxis.addSubCategory("Коктейль"); // Удаляем из диаграммы осевые линии и метки делений domainAxis.setAxisLineVisible(false); // осевая линия domainAxis.setTickMarksVisible(false); // метки деления оси CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setDomainAxis(domainAxis); plot.setRenderer(renderer); plot.setFixedLegendItems(createLegendItems()); plot.setBackgroundPaint (new Color(232, 232, 248)); return chart; } /** * Создание легенды для диаграммы * @return LegendItemCollection */ private LegendItemCollection createLegendItems() { LegendItemCollection legend = new LegendItemCollection(); LegendItem item1 = new LegendItem("Офис 1", COLOR_1); LegendItem item2 = new LegendItem("Офис 2", COLOR_2); LegendItem item3 = new LegendItem("Офис 3", COLOR_3); LegendItem item4 = new LegendItem("Офис 4", COLOR_4); legend.add(item1); legend.add(item2); legend.add(item3); legend.add(item4); return legend; } public static void main(final String[] args) { final BarChartStacked demo = new BarChartStacked(TITLE); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } Скачать примерыИсходные коды примеров создания диаграмм Bar Chart с использованием библиотеки JFreeChart в виде maven-проекта можно скачать здесь (30.0 Кб). |