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