2

我有一些用 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)传递给它。

您可以提供的任何帮助将不胜感激。我已经尽我所能寻找解决这个特定问题的方法,但如果我遗漏了什么,我深表歉意。请务必提出任何问题以澄清。

4

0 回答 0