我有以下情况:我有一个带有两个 y 轴的图,左边是对数刻度并显示 quantitiy y(x)
。x
在 x 轴上是线性的。在第二个y
轴上,我想要绘制在第一个轴上的相同值的附加自然对数刻度。y
所以想象我在第一个轴上有以下刻度:
10^0 10^1 10^2
然后在第二个y
轴上我会有一个比例
exp(10^0) exp(10^1) exp(10^2)
使用此示例中的代码,我设法正确设置了第二个轴的限制。但是,由于标度与对数不同,因此两者之间的值以错误的方式放置。由于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)
,wheny
是左轴上的勾号。