【发布时间】:2020-03-19 17:07:08
【问题描述】:
我试图遵循这个文档
https://matplotlib.org/3.1.0/gallery/subplots_axes_and_figures/secondary_axis.html
在辅助轴变换的第三种情况下,即,当“我们想要在一个变换中关联轴时,该变换是从数据中临时得出的,并且是根据经验得出的”,因此,设置“正向和反向变换函数是从一个数据集到另一个数据集的线性插值。”。但我无法达到令人满意的结果。
以本文档第一个示例的简单绘图为例:具有两个水平轴的正弦波,其中一个是同一绘图上的弧度到度数的转换。
下面的代码给出了正确的结果,其中底轴以弧度为单位,顶轴以度为单位
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(constrained_layout=True)
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x)
ax.plot(x, y)
def deg2rad(x):
return x * np.pi / 180
def rad2deg(x):
return x * 180 / np.pi
secax = ax.secondary_xaxis('top', functions=(rad2deg,deg2rad))
plt.show()
但是,下面的代码旨在模拟“度数轴”将来自经验数据(数组变量xnew,可能是其他值),但它没有给出正确的结果(遵循插值函数文档)。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(constrained_layout=True)
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x)
ax.plot(x, y)
xold = x
xnew = x * 180 / np.pi
def forward(x):
return np.interp(x, xold, xnew)
def inverse(x):
return np.interp(x, xnew, xold)
secax = ax.secondary_xaxis('top', functions=(forward,inverse))
plt.show()
我错过了什么?
【问题讨论】:
标签: python matplotlib