【问题标题】:JFreechart tick unitsJFreechart 刻度单位
【发布时间】:2012-04-19 01:46:47
【问题描述】:

我正在使用我从网上下载的以下代码

TickUnits units = new TickUnits();
DecimalFormat df1 = new DecimalFormat("$0");
DecimalFormat df2 = new DecimalFormat("$0.00");

// we can add the units in any order, the TickUnits collection will
// sort them...
units.add(new NumberTickUnit(100, df1, 0));
units.add(new NumberTickUnit(50, df1, 0));
units.add(new NumberTickUnit(20, df1, 0));
units.add(new NumberTickUnit(10, df1, 0));
units.add(new NumberTickUnit(5, df1, 0));
units.add(new NumberTickUnit(2, df1, 0));
units.add(new NumberTickUnit(1, df1, 0));

由于我是新手,我不明白这段代码实际上是做什么的。我认为它设置了 y 轴上的值,但似乎并非如此,因为 y 轴上有超过 100 美元的值。这段代码究竟做了什么。 (还有到底什么是刻度单位。它是定义轴上的标签还是我在这里弄错了)。

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    是的,TickUnits 定义了Axis 标签的格式,但是完整的解释超出了 Stackoverflow 的范围。 developer guide 是决定性的,但检查为特定 Axis 子类返回 TickUnitSource 的方法可能会证明是有益的。比如NumberAxiscreateIntegerTickUnits()的源码,连同NumberTickUnitSource

    引用的示例存在缺陷,因为它忽略了用户的语言环境。

    附录:如果您想要本地化货币格式,请覆盖默认的Number 格式化程序。

    XYPlot plot = chart.getXYPlot();
    NumberAxis range = (NumberAxis) plot.getRangeAxis();
    range.setNumberFormatOverride(NumberFormat.getCurrencyInstance());
    

    免责声明:不隶属于 Object Refinery Limited;只是一个满意的客户和非常小的贡献者。

    【讨论】:

    • 如果它定义了轴上的值,我为什么要观察超出此范围的值。
    • A ValueAxis 使用其TickUnitSource 来自动范围标签,但您可以使用setRange() 覆盖它。添加更多NumberTickUnit 实例会改变粒度;边界由Dataset 确定。
    • 我正在创建我自己的票,如上述程序中所述。我也使用了从 20 到 70 的 setRange。这仍然不能阻止超过 70 的值出现。
    • 我建议编辑您的问题以阐明您的要求并包含一个 sscce 来展示您的发现。
    • afreechart 是基于 jfreechart (android based) 的,大部分功能是相同的,虽然一两个可能不同
    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多