how to display customized values on a bar in bar chart using jfree chart?
jfreechart
Solution
`StandardCategoryItemLabelGenerator` uses an instance of `MessgeFormat` for this, defaulting to ArgumentIndex `{2}`. The other ArgumentIndex values are defined in the abstract parent. For example,
renderer.setBaseItemLabelGenerator(
new StandardCategoryItemLabelGenerator(
"{0} {1} {2} {3}", NumberFormat.getInstance()));
renderer.setBaseItemLabelsVisible(true);
You can also override `generateLabel()` to return any value you want.
Problem
By using StandardCategoryItemLabelGenerator() Iam able to display the exact range axis value on a bar, Now my problem is I dont want to display the range axis value instead I want to display some other value of that bar How I can achieve that? ``` for (String IDS : idMap.keySet()) { List<String> listValues = idMap.get(IDS); if(listValues != null && listValues.get(1) != null) { dataSet.setValue(Double.valueOf(listValues.get(1)), "", IDS); } } JFreeChart chart = ChartFactory.createBarChart3D("", "", "Time taken ", dataSet,PlotOrientation.VERTICAL, true, true, false); chart.setTitle(new org.jfree.chart.title.TextTitle("Time Duration",new java.awt.Font("SansSerif", java.awt.Font.BOLD, 10))); chart.getLegend().setItemFont(new java.awt.Font("SansSerif",0,7)); chart.removeLegend(); final CategoryPlot plot = chart.getCategoryPlot(); plot.setNoDataMessage("No data available"); final CategoryItemRenderer renderer = plot.getRenderer(); renderer.setItemLabelsVisible(true); final BarRenderer r = (BarRenderer) renderer; r.setMaximumBarWidth(0.05); r.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); r.setBaseItemLabelsVisible(true); r.setSeriesItemLabelFont(0, new java.awt.Font("Times New Roman",Font.NORMAL,7)); r.setSeriesPositiveItemLabelPosition(0, new ItemLabelPosition(ItemLabelAnchor.OUTSIDE3, TextAnchor.BOTTOM_LEFT, TextAnchor.BOTTOM_LEFT, -Math.PI/2)); final ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(new java.awt.Font("SansSerif", java.awt.Font.BOLD, 8)); final CategoryAxis axis = plot.getDomainAxis(); axis.setLabel("ids"); axis.setLabelFont(new java.awt.Font("SansSerif", java.awt.Font.BOLD, 8)); axis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 8.0)); axis.setTickLabelFont(new java.awt.Font("SansSerif", java.awt.Font.BOLD, 6)); plot.setDomainGridlinesVisible(true); plot.setRangeGridlinesVisible(true); ``` By using the above code iam able to display exact range axis value on a bar, but I dont want the range axis value I need some other value listValues.get(2) to be displayed on a bar How I can achieve that?