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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...