我有一些用 pcolormesh 绘制的 3d 数据。
x轴是时间,y轴是高度。
高度具有与之相关的势 (E),但从高度 (y) 到势 (E) 的映射是非线性的。
我想在我的图形右侧添加一个轴,显示基于左侧值的正确电位。我并不特别关心排列的左右刻度线(就像这个解决方案中的情况一样)。如果在右轴上有任何“好数字”刻度会有用。
我已经尝试根据 matplotlib docs 中的 celsius-farenheit 示例设置顶部和底部点的 ylim ,但这假设起点和终点之间是线性比例,这不是这里的情况。
最后我尝试使用 funcformatter,但是潜力的缩放需要给出两个外部常量,我找不到可以将常量传递给 funcformatter 的方法。
到目前为止,我的代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
time = np.arange(0.0, 11.0, 1.0)
y = np.arange(0.0, 11.0, 1.0)
data = np.random.randint(1,100, size=(11,11))
fig,ax=plt.subplots(1,1)
im=ax.pcolormesh(time,y,data,shading='nearest')
ax.set_xlabel('time')
ax.set_ylabel('height')
ax.set_ylim(y.min(),y.max())
ax_E = ax.twinx()
ax_E.set_ylabel('Potential E')
plt.savefig('test.png')
目前,右侧 y 轴具有从 0 到 1.0 的线性刻度。我希望根据左侧 y 轴上的 y 值,用一个显示潜在正确性的比例来替换它。
我想用于潜力的功能是这样的:
def get_E(mu, ymax, y):
p2 = 2.0*mu/ymax**3
Jmin = 2.0*np.sqrt(p2)*ymax
pmin = Jmin/(2.0*y)
E = np.sqrt(mu**2*pmin**2 + mu**2) - mu
return E
即高度非线性,有 2 个常数(mu 和 ymax)传递给它。
您可以提供的任何帮助将不胜感激。我已经尽我所能寻找解决这个特定问题的方法,但如果我遗漏了什么,我深表歉意。请务必提出任何问题以澄清。