在值轴条形图JfreeChart上使用百分比时,值乘以100乘以

时间:2014-01-29 06:27:03

标签: java jfreechart

我正在使用JfreeChart 1.0.15库。
我想显示大学和分校的百分比,所以我使用setNumberFormatOverride()方法

final NumberAxis valueAxis = new NumberAxis("Percentage Score");
valueAxis.setNumberFormatOverride(NumberFormat.getPercentInstance());

它显示%上的Y-axis符号,但所有值都乘以100.

Actual output

查看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);

我尝试了

的不同解决方案

他们都没有工作 如果您需要更多信息,请告诉我们。

2 个答案:

答案 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);

Correct output

现在格式也已应用于标签。