0

我正在使用 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() 方法,以便在图表缩放时强制它显示刻度标签/名称。

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

谢谢。

4

2 回答 2

0

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

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

于 2014-01-17T09:48:38.823 回答
0

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

我所做的是监听 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 侦听器来解决,但我没有找到。

于 2016-01-21T11:12:39.353 回答