Matplotlib图表中的双Y轴

18
在matplolib中,我可以为时间线图设置左侧不同的y轴值,并在右侧使用其他比例尺来创建另一个y轴吗?
我正在使用以下内容:
import matplotlib.pyplot as plt 

plt.axis('normal')
plt.axvspan(76, 76, facecolor='g', alpha=1)
plt.plot(ts, 'b',linewidth=1.5)
plt.ylabel("name",fontsize=14,color='blue')
plt.ylim(ymax=100)
plt.xlim(xmax=100)
plt.grid(True)
plt.title("name", fontsize=20,color='black')
plt.xlabel('xlabel', fontsize=14, color='b')
plt.show()

我可以在这个图中使用两个y轴吗?

在span选择器中:

 plt.axvspan(76, 76, facecolor='g', alpha=1)

我想编写文本来描述这个,例如“这是span选择器”,我该怎么做?

可能是重复的问题:matplotlib:如何叠加具有不同比例的图形? - tacaswell
不,这不是我想要的。我希望在同一张图中左右两侧都有两个y轴。 - Helen Firs
所以你想要一个有4个(?!)独立y轴的图表吗?请向下滚动到被接受的答案的后半部分。 - tacaswell
你解决了这个问题吗? - tacaswell
1个回答

27

你想要 twinx 示例。其要点如下:

ax = plt.gca()
ax2 = ax.twinx()

您可以使用以下代码在第一个坐标轴上绘图:

ax.plot(...)

和第二个一样

ax2.plot(...)

在您的情况下(我认为)您想要:

import matplotlib.pyplot as plt 

ax = plt.gca()
ax2 = ax.twinx()
plt.axis('normal')
ax2.axvspan(74, 76, facecolor='g', alpha=1)
ax.plot(range(50), 'b',linewidth=1.5)
ax.set_ylabel("name",fontsize=14,color='blue')
ax2.set_ylabel("name2",fontsize=14,color='blue')
ax.set_ylim(ymax=100)
ax.set_xlim(xmax=100)
ax.grid(True)
plt.title("name", fontsize=20,color='black')
ax.set_xlabel('xlabel', fontsize=14, color='b')
plt.show()

3
你对传奇怎么处理?我的传奇是叠在一起的。 - raphael
1
@raphael 在调用图例时明确传递位置以解决冲突。我认为“最佳”放置算法不会考虑其他轴上的艺术家。 - tacaswell
假设我有x、y1和y2值列表,其中y2是y1的转换。我不想使用plot(x,y1)和plot(x,y2)绘制两条不同的曲线,而是想要一个曲线(例如使用y1作为左y轴刻度和y2作为右y轴刻度的plot(x,y1))。在twinx中是否可能实现? - roschach
拥有多个图例并不是一个理想的解决方案,应该有可能拥有一个共同的图例。 - Pieter Meiresone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接