【问题标题】:matplotlib diagrams with 2 y-axis带有 2 个 y 轴的 matplotlib 图
【发布时间】:2013-02-26 06:21:39
【问题描述】:

在时间线图的 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()

我可以在这个图中给出 2 个 y 轴吗?

在跨度选择器中:

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

我想用正确的文本来描述这个跨度,例如“这是跨度选择器”,我该怎么做?

【问题讨论】:

  • 不,这不是在同一个情节中我想要情节左侧和右侧的 2 个 y 轴
  • 所以你想要一个带有 4(?!) 个单独 y 轴的图表?向下滚动到已接受答案的后半部分。
  • 你解决了吗?

标签: python matplotlib


【解决方案1】:

你想要twinxexample。要点:

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()

【讨论】:

  • 你对传奇有什么看法?我把我的叠放在一起
  • @raphael 将位置显式传递给图例调用以消除它们的冲突。我不认为“最佳”放置算法会考虑其他轴上的艺术家。
  • 假设我有 x、y1 和 y2 值列表,其中 y2 是 y1 的转换。而不是做 plot(x, y1) 和 plot(x, y2) 会导致两条不同的曲线,我想要一条曲线(例如从 plot(x,y1) 使用 y1 作为左 y 轴刻度和y2 作为右 y 轴刻度。twinx 可以吗?
  • 拥有多个图例并不是一个理想的解决方案,应该有可能拥有一个共同的图例。
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2020-11-09
  • 2021-01-14
相关资源
最近更新 更多