我正在使用JfreeChart 1.0.15库。
我想显示大学和分校的百分比,所以我使用setNumberFormatOverride()
方法
final NumberAxis valueAxis = new NumberAxis("Percentage Score");
valueAxis.setNumberFormatOverride(NumberFormat.getPercentInstance());
它显示%
上的Y-axis
符号,但所有值都乘以100.
查看Y-axis
值。条形图上的标签值是正确的。
如果我将每个值除以100,那么Y-axis
值是正确的(例如15%,19%,25%,27%),但标签值显示错误(例如0.15,0.19,0.25,0.27)。
下面的代码也不会提供所需的输出
DecimalFormat pctFormat = new DecimalFormat("#.0%");
valueAxis.setNumberFormatOverride(pctFormat);
我尝试了
的不同解决方案他们都没有工作 如果您需要更多信息,请告诉我们。
答案 0 :(得分:5)
如果查看NumberFormat
的来源,您会看到NumberFormat#getPercentInstance()
实际返回DecimalFormat
个实例。虽然从源代码中可以看出实例使用的格式字符串不是很明显,但可以认为它包含%
。
根据标题为特殊模式字符的DecimalFormat
javadoc部分,格式字符串中的%
表示Multiply by 100 and show as percentage
。幸运的是,NumberFormat
提供了setMultiplier()
方法,因此您可以执行此操作来解决您的问题:
DecimalFormat pctFormat = new DecimalFormat("##.0%");
pctFormat.setMultiplier(1);
valueAxis.setNumberFormatOverride(pctFormat);
我相信你也可以引用%
,就像这样:
DecimalFormat pctFormat = new DecimalFormat("##.0'%'");
valueAxis.setNumberFormatOverride(pctFormat);
答案 1 :(得分:0)
谢谢@Keppil。我设法从你的valuable comment
解决了我使用下面的代码来设置标签
barPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barPlot.getRenderer().setBaseItemLabelsVisible(true);
错误是调用默认构造函数StandardCategoryItemLabelGenerator()
查看问题标签的格式不是%
格式。
我通过将NumberFormat
实例pctFormat
传递给参数化构造函数StandardCategoryItemLabelGenerator(java.lang.String labelFormat, java.text.NumberFormat formatter)
barPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",pctFormat));
barPlot.getRenderer().setBaseItemLabelsVisible(true);
现在格式也已应用于标签。