I have a chart in Perspective that I’m trying to replicate in a PDF report:
Problem is, the Bar Chart doesn’t allow for the trend lines, and the XY/Timeseries charts can combine bars and lines, but I can’t figure out how to get the bars to render side-by-side instead of overlapping…
Thanks to help from Claude, I figured out how to get the bars separated in a TimeseriesChart using a “clustered” bar renderer:
def configureChart(data, chart):
from org.jfree.chart.renderer.xy import ClusteredXYBarRenderer, StandardXYBarPainter, XYBarRenderer
from java.awt import Color, BasicStroke
plot = chart.getPlot()
# Only replace renderers that are already bar renderers
for idx in range(plot.getRendererCount()):
r = plot.getRenderer(idx)
if isinstance(r, XYBarRenderer):
ds = plot.getDataset(idx)
newRenderer = ClusteredXYBarRenderer(3, False)
newRenderer.setBarPainter(StandardXYBarPainter())
newRenderer.setShadowVisible(False)
newRenderer.setDrawBarOutline(True)
newRenderer.setBaseOutlinePaint(Color.WHITE)
newRenderer.setBaseOutlineStroke(BasicStroke(1.0))
if ds is not None:
for i in range(ds.getSeriesCount()):
paint = r.getSeriesPaint(i)
if paint is not None:
newRenderer.setSeriesPaint(i, paint)
stroke = r.getSeriesStroke(i)
if stroke is not None:
newRenderer.setSeriesStroke(i, stroke)
plot.setRenderer(idx, newRenderer)