当前位置: 首页 > 知识库问答 >
问题:

JFreeChart刻度标签在放大时消失

闾丘玮
2023-03-14

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

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

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

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

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

谢谢

共有2个答案

长孙玉泽
2023-03-14

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

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

以下是一个例子:

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监听器来解决,但我没有找到任何监听器。

庄嘉
2023-03-14

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

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

 类似资料:
  • 使用jfreechart fx渲染带有垂直刻度标签的时间序列图表时,标签意外地与域轴重叠,有时在调整大小时会发生更改。我无法用Swing或纯Java2D重现这一点,如图所示。我欢迎任何指导。

  • 我需要移动轴中所有刻度线的标签(),使文本位于其自己的刻度线和下一个刻度线的中间。 我正在使用Roland的甘特图控件(经过一些修改)和Christian Schudt的DateAxis作为我的X轴。我的目标是根据Date值绘制甘特图(忽略时间;所有时间值都被截断)。 我的甘特图对每个任务都有一个“开始日期”和“结束日期”(即在图表上,它由一个条形图表示)。 考虑一下: 我有一个从2月1日开始的任

  • 问题内容: 我有一个始终从x = 0开始的JFree XY折线图。然后,根据属性文件中用户定义的设置,应用程序将根据该数字(以分钟为单位)递增。 例如,x = 0开始时,用户定义的设置为5,因此刻度变为0、5、10、15、20…,或者用户设置为3,因此变为0、3、6、9、12…非常简单。 我遇到的问题是图表开始的方式。如果我从0开始,则0在图形的中间,而不是在左下角的-0.0000005,-0.0

  • 我正在使用我从网上下载的以下代码 由于我很新,我不明白这段代码实际上是做什么的。我以为它在y轴上设置值,但似乎不是这样,因为在y轴上有超过100美元的值。这段代码到底是做什么的。(也就是什么是刻度单位。它是否定义了轴上的标签,或者我在这里弄错了)。

  • 我有数据,例如(13600),(24400)。。。(3315000)其中(13000)- 如果放入图表中,轴将显示“秒”作为数字。我设置了一个代码,以1小时为间隔显示轴标签。 现在轴标签是:0。。。3600 ... 7200 ... 10.800 ... 如何使轴标签以小时显示?(0 ... 1 ... 2 ... 3 ...)

  • 刻度指的是轴上数据点的标记,Matplotlib 能够自动的在 x 、y 轴上绘制出刻度。这一功能的实现得益于 Matplotlib 内置的刻度定位器和格式化器(两个内建类)。在大多数情况下,这两个内建类完全能够满足我们的绘图需求,但是在某些情况下,刻度标签或刻度也需要满足特定的要求,比如将刻度设置为“英文数字形式”或者“大写阿拉伯数字”,此时就需要对它们重新设置。 xticks() 和 ytic