Y 轴在 JFreeChart 中未显示百万和十亿的正确数字
Y Axis is not displaying correct figure for Millions and Billions in JFreeChart
在使用 JFreeChart 生成条形图时,我得到了数十亿和数百万的科学数字格式的值,可读性较低,
有什么方法可以让我像使用JfreeChart一样获取值。
它必须是动态的百万,数十亿的所有价值。
任何帮助将不胜感激。
也许您可以创建自己的自定义 TickUnits, as this other post 建议。
使用调用 setNumberFormatOverride()
on your plot's NumberAxis
, as shown . You'll need a custom NumberFormat
, possibly using one of the approach shown here or here.
感谢@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);
}
});
在使用 JFreeChart 生成条形图时,我得到了数十亿和数百万的科学数字格式的值,可读性较低,
有什么方法可以让我像使用JfreeChart一样获取值。
它必须是动态的百万,数十亿的所有价值。 任何帮助将不胜感激。
也许您可以创建自己的自定义 TickUnits, as this other post 建议。
使用调用 setNumberFormatOverride()
on your plot's NumberAxis
, as shown NumberFormat
, possibly using one of the approach shown here or here.
感谢@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);
}
});