我正在尝试为我的绘图创建一个辅助轴。我可以将所有线条绘制在图表上(y1 到 y14),并且所有 y 值都采用相同的单位。到辅助单位的转换本质上是“exp(y/7)”。我为此苦苦挣扎了足够长的时间,最终求助于 chatgpt,经过长时间的故障排除后,它给了我以下信息:
def y_to_secondary(y):
return np.asarray(math.exp(np.asarray(y1)/(7)))
def secondary_to_y(secondary):
return 7*math.log(np.asarray(secondary))
secay = ax1.secondary_yaxis('right', functions=(y_to_secondary, secondary_to_y))
我继续收到错误:TypeError: only size-1 arrays can be conversion to Python scalars
我定义原始数组如下:
y1=[]
T1=[]
for a in range(2,1000):
y1.append(-7 + (2*a))
有什么想法可以解决这个问题吗?
首先,你不需要这个 np.asarray() 方法。 您应该具备以下条件:
def y_to_secondary(y):
return np.exp(y/7)
def secondary_to_y(secondary):
return np.log(secondary) * 7
这应该可以修复你的类型错误。
那么我不太确定你想要绘制什么,但是如果你想要第一个函数
y1 = 2x-7
和第二个y2 = exp(y/7)
,那么你可以这样做。
您必须将 x 值固定得不要太高 (<100), or you will encounter an overflow.
fig, ax1 = plt.subplots()
# First y-axis
X = np.arange(2,50,1)
y1 = 2*X-7
plt.plot(X, y1, label='$y1$')
ax1.plot(X, np.exp(X/7), label='$y2$')
ax1.legend()
# Second y-axis
_ = ax1.secondary_yaxis('right', functions=(y_to_secondary, secondary_to_y))
这是结果:具有 2 个 y 轴的图。最后,您可以使用tick_params来更好地渲染第二个y轴。