【问题标题】:JFreeChart Tick Labels disappear when Zooming inJFreeChart 刻度标签在放大时消失
【发布时间】:2013-10-31 04:56:46
【问题描述】:

我正在使用 JFreeChart 创建带有“对数”y 轴的 XYLineCharts,但遇到了一个我似乎无法解决的错误。

在某些情况下,我的值​​非常低(在一种情况下,y 轴值的范围在 4.5e-8 到 1.7112 之间)。我将这些值绘制在 XYLineChart 上,使用对数轴作为 y 轴(并在 y 轴上使用 LogAxis.createLogTickUnits(Locale.ENGLISH) 和 .setExpTickLabelsFlag(true) 创建指数刻度单位)。我将范围的范围从 4.5e-8 设置为 1.712,并且可以清楚地看到这些点,即使图表在 y 轴上仅显示 1 个值:1e0。

这没关系,但是当我进一步放大图表时,y 轴上的刻度标签会自动消失。如果我将 y 轴值放大太多,这也会发生在使用 NumberAxis 的图表中。基本上,如果 y 轴值的差异变得非常小(并且超过 8 位小数),标签就会消失。

如何覆盖 JFreeChart 中的 zoom() 方法,以便在图表缩放时强制它显示刻度标签/名称。

如果有人有任何建议或解决方案,请尽快告诉我,因为我需要尽快实施。

谢谢。

【问题讨论】:

  • 请问有人有什么建议吗?我被这个 JFreeChart 错误困住了,想不出办法来修复它……

标签: java charts zooming jfreechart


【解决方案1】:

缩放事件在两种情况下触发:鼠标滚轮和弹出菜单命令。在这两种情况下,都会调用“ChartPanel”的“zoom*”方法(zoomInBoth、zoomInDomain、zoomInRange 等),因此您可以根据需要重写这些方法。

我认为重写这些方法不是一个好主意。也许有一些关于轴属性的配置,您可以更改这些配置,以便刻度标签/名称在缩放后不会消失。您可以查阅源代码。

【讨论】:

  • 感谢您的回复。但是,我已经设法通过覆盖 JFreeChart API 的 zoom() 方法来使其工作。不过还是谢谢。
【解决方案2】:

我知道已经有一段时间了,但我遇到了同样的问题,因为放大时,刻度单位变得太大并且没有显示任何标签。

我所做的是监听 AxisChange 并计算一个新的刻度单位,然后将其设置为轴。

这是一个例子:

chart.getXYPlot().getDomainAxis().addChangeListener(new AxisChangeListener() {
        @Override
        public void axisChanged(AxisChangeEvent e) {
            // TODO Auto-generated method stub
            Date lowerB = ((DateAxis)e.getAxis()).getMinimumDate();
            Date upperB = ((DateAxis)e.getAxis()).getMaximumDate();
            setTick(((DateAxis)e.getAxis()),calculateTick(lowerB,upperB));
        }
    });

在 setTick 方法中要小心检查刻度是否已更改,否则由于该事件,这将是一个无限循环。这可以通过使用“缩放侦听器”而不是 AxiChanged 侦听器来解决,但我没有找到任何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2021-06-14
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多