JFreeChart 刻度标签在放大时消失



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

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

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

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

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

谢谢。

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

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

我知道

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

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

最新更新