缩放matplotlib图以显示小/大正/负差异

3 投票
2 回答
3509 浏览
提问于 2025-04-17 16:22

enter image description here

这个图表是用来展示时间的差异,这些差异可以是正数也可以是负数。有些差异非常小,而有些则非常大。

我能不能调整x轴的刻度,让靠近x=0的地方显示得更细致,而离x=0远的地方显示得粗略一些?有没有办法让x=0往外的部分使用对数刻度?

编辑:

根据@Evert的建议,这个方法解决了我的问题:

ax = gca()
...
ax.set_xscale("symlog")

并且生成了这个图:

enter image description here

2 个回答

3

我会做两个子图:在右边的子图中画出正数时间,在左边的子图中画出负数时间的绝对值,并且要把 x轴反向

有没有可能让x=0的地方使用对数刻度向外扩展呢?

不行,因为对数图不能显示零——当你接近对数x轴的“左端”时,实际上是在向负无穷大靠近,所以你无法跨过零去到真正的负值。你必须以某种方式把零去掉。

7

你可以在 xscale() 函数中使用 symlog 设置:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xscale

这个设置会让你的图表在对数尺度下显示(包括负数部分),不过在零附近有一小段区域是线性显示的(你可以通过其他参数来设置,具体可以查看文档)。这样做的好处是可以避免出现 log(0) 这种问题。

想看一个例子,可以查看 这里

撰写回答