自定义Matplotlib缩放:Log(Ln(x))

时间:2012-07-23 09:23:43

标签: plot matplotlib scale

我有以下情况:我有一个带有两个y轴的图,左边是一个对数刻度并显示了数量y(x)x在x轴上是线性的。在第二个y轴上,我想要在第一个轴上绘制的相同值的附加自然对数标度。想象一下,我在第一个y轴上有以下刻度:

10^0       10^1       10^2

然后在第二个y轴上我会有一个比例

exp(10^0)  exp(10^1)  exp(10^2)

使用此example中的代码,我设法正确设置了第二个轴的限制。但是,由于比例与对数不同,因此两者之间的值以错误的方式放置。由于exp(10^2)非常大,exp(10^1)exp(10^0)的刻度在轴的底部彼此非常接近,而10^1恰好位于中间位置第一个y轴。

我认为我可以使用自定义比例,但示例非常复杂,我认为可能有更简单的方法来执行此操作。如果没有,我仍然可以手动自己标记滴答,这是一个非常脏的解决方案。


一个例子:

#!/usr/bin/python2

from numpy import arange, exp
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = plt.twinx()
ax1.set_yscale("log")
ax2.set_yscale("log")
ax1.grid(True)

# the conversion
def time(energy):
    return exp(energy)

# the callback to adjust the limits
def update_ax2(ax1):
   y1, y2 = ax1.get_ylim()
   ax2.set_ylim(time(y1), time(y2))
   ax2.figure.canvas.draw()
ax1.callbacks.connect("ylim_changed", update_ax2)

# plot some function
xvals = arange(0,4,0.1)
ax1.plot(xvals, exp(xvals), '-')

plt.show()

结果图片如下:

The plot

如您所见,上下轴限制匹配左右刻度,而中点不匹配,因为右轴上的缩放不同。虽然我最终手动为我的图片添加了所需的刻度,但如果有一个简单的解决方案可以解决这个问题。当exp(y)是左轴上的刻度时,转换函数只是y

0 个答案:

没有答案