【问题标题】:Y Axis is not displaying correct figure for Millions and Billions in JFreeChartY 轴未在 JFreeChart 中显示百万和十亿的正确数字
【发布时间】:2017-04-07 14:06:55
【问题描述】:

在使用 JFreeChart 生成条形图时,我得到了数十亿和数百万的科学数字格式的值,可读性较差,

有什么办法,让我可以像使用JfreeChart一样获得价值。

它必须是动态的百万,数十亿的所有价值。 任何帮助将不胜感激。

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    感谢@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,在数字常量中使用_,并分解出公共代码。
    • 感谢@trashgod 的建议。
    • 正是我想要的!谢谢。
    【解决方案2】:

    在绘图的NumberAxis 上使用调用setNumberFormatOverride(),如here 所示。您将需要一个自定义的NumberFormat,可能使用herehere 显示的方法之一。

    【讨论】:

      【解决方案3】:

      也许您可以按照this other post 的建议创建自己的自定义TickUnits

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多