如何解决matplotlib 图中共享 y 轴之间的 twinx 非线性映射
我有一些用 pcolormesh 绘制的 3d 数据。
x 轴是时间,y 轴是高度。
高度具有与之关联的势 (E),但从高度 (y) 到势 (E) 的映射是非线性的。
我想在图的右侧添加一个轴,显示基于左侧值的正确电位。我并不特别关心左右刻度线的排列(如 this solution 中的情况)。如果在右轴上有任何“不错的数字”刻度会很有用。
我已尝试根据 celsius-farenheit example in the matplotlib docs 设置顶部和底部点的 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,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)。
您能提供的任何帮助将不胜感激。 我已经尽最大努力寻找这个特定问题的解决方案,但如果我错过了什么,我深表歉意。 请提出任何问题以澄清。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。