缩放matplotlib图以显示小/大正/负差异
这个图表是用来展示时间的差异,这些差异可以是正数也可以是负数。有些差异非常小,而有些则非常大。
我能不能调整x轴的刻度,让靠近x=0的地方显示得更细致,而离x=0远的地方显示得粗略一些?有没有办法让x=0往外的部分使用对数刻度?
编辑:
根据@Evert的建议,这个方法解决了我的问题:
ax = gca()
...
ax.set_xscale("symlog")
并且生成了这个图:
2 个回答
3
我会做两个子图:在右边的子图中画出正数时间,在左边的子图中画出负数时间的绝对值,并且要把 x轴反向。
有没有可能让x=0的地方使用对数刻度向外扩展呢?
不行,因为对数图不能显示零——当你接近对数x轴的“左端”时,实际上是在向负无穷大靠近,所以你无法跨过零去到真正的负值。你必须以某种方式把零去掉。
7
你可以在 xscale()
函数中使用 symlog
设置:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xscale
这个设置会让你的图表在对数尺度下显示(包括负数部分),不过在零附近有一小段区域是线性显示的(你可以通过其他参数来设置,具体可以查看文档)。这样做的好处是可以避免出现 log(0)
这种问题。
想看一个例子,可以查看 这里。