Ширина полосы в Jfreechart
Есть ли способ настроить ширину баров в Barchart?
Я создаю свою диаграмму со следующим кодом.
final JFreeChart chart = ChartFactory.createBarChart("Report", // chart title
"Date", // domain axis label
"Number", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);
Ответы
Ответ 1
Вы также можете установить максимальную ширину полосы. Это полезно, если у вас есть широкий график, но иногда есть только один или два точки данных, и вы не хотите, чтобы один большой жирный бар занимал всю площадь.
CategoryPlot categoryPlot = chart.getCategoryPlot();
BarRenderer br = (BarRenderer) categoryPlot.getRenderer();
br.setMaximumBarWidth(.35); // set maximum width to 35% of chart
Ответ 2
Вы не можете напрямую указать ширину столбцов, но есть несколько атрибутов, которые можно изменить, которые влияют на ширину. Вы должны взглянуть на атрибуты lowerMargin, upperMargin и categoryMargin, определенные атрибутом CategoryAxis или itemMargin, в BarRenderer.
Например:
BarRenderer renderer = (BarRenderer) chart.getCategoryPlot().getRenderer();
renderer.setItemMargin(.1);
Двойной параметр, указанный в setItemMargin(double percent)
, представляет собой процент от общей длины оси категории, которая будет использоваться для пространства между столбцами в пределах одной категории (по умолчанию - 0,2 или 20%). Чем меньше это значение, тем больше будет баров.
Ответ 3
Согласно Дейву Гилберту (руководитель проекта JFreeChart)
Ширина полосы автоматически рассчитывается и будет зависеть от диаграмму или ширину графика и количество элементов в вашем наборе данных.
См. обсуждение здесь.
Ответ 4
После получения результатов с использованием положительных полей и нуля я попытался использовать отрицательные числа для itemMargin
, чтобы узнать, что произойдет. Бары стали толще. Я не знаю, рекомендуется ли это, так как вы получите перекрытие, если недостаточно свободного места.
BarRenderer renderer = (BarRenderer) chart.getCategoryPlot().getRenderer();
renderer.setItemMargin(-2);