如何基于复杂的转换创建辅助轴?

问题描述 投票:0回答:1

我正在尝试为我的绘图创建一个辅助轴。我可以将所有线条绘制在图表上(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))

有什么想法可以解决这个问题吗?

python math subplot multiple-axes
1个回答
0
投票

首先,你不需要这个 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轴。

© www.soinside.com 2019 - 2024. All rights reserved.