【发布时间】:2017-04-07 14:06:55
【问题描述】:
在使用 JFreeChart 生成条形图时,我得到了数十亿和数百万的科学数字格式的值,可读性较差,
有什么办法,让我可以像使用JfreeChart一样获得价值。
它必须是动态的百万,数十亿的所有价值。 任何帮助将不胜感激。
【问题讨论】:
标签: java jfreechart
在使用 JFreeChart 生成条形图时,我得到了数十亿和数百万的科学数字格式的值,可读性较差,
有什么办法,让我可以像使用JfreeChart一样获得价值。
它必须是动态的百万,数十亿的所有价值。 任何帮助将不胜感激。
【问题讨论】:
标签: java jfreechart
感谢@Haroldo_OK 和@trashgod 的提示,最后我得到了相同的解决方案,它给了我预期的结果。
final long MILLION = 1000000L;
final long BILLION = 1000000000L;
final long TRILLION = 1000000000000L;
final long THOUSAND = 1000L;
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setNumberFormatOverride(new NumberFormat() {
@Override
public Number parse(String source, ParsePosition parsePosition) {
return null;
}
@Override
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
String temp = number < THOUSAND ? String.valueOf(number) :
number < MILLION ? (int)(number / THOUSAND) + " K" :
number < BILLION ? (int)(number / MILLION) + " M" :
number < TRILLION ? (int)(number / BILLION) + " B" :
(int)(number / TRILLION) + " T";
return new StringBuffer(temp);
}
@Override
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
String temp = number < THOUSAND ? String.valueOf(number) :
number < MILLION ? (int)(number / THOUSAND) + " K" :
number < BILLION ? (int)(number / MILLION) + " M" :
number < TRILLION ? (int)(number / BILLION) + " B" :
(int)(number / TRILLION) + " T";
return new StringBuffer(temp);
}
});
【讨论】:
static,在数字常量中使用_,并分解出公共代码。
在绘图的NumberAxis 上使用调用setNumberFormatOverride(),如here 所示。您将需要一个自定义的NumberFormat,可能使用here 或here 显示的方法之一。
【讨论】:
也许您可以按照this other post 的建议创建自己的自定义TickUnits。
【讨论】: