在pyplot中与三个子图中的两个共享yaxis标签

时间:2013-12-18 14:18:27

标签: python matplotlib

我有以下代码生成显示的图。

mport matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec
import numpy as np

One = range(1,10)
Two = range(5, 14) 
l = len(One)
fig = plt.figure(figsize=(10,6))
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3]) 

ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
plt.ylabel("Number of occurrence")

ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)

ax2 =  plt.subplot(gs[2])
ax2.bar(range(l), One)

plt.show()

enter image description here

我希望ylabel(“出现次数”)在第一个和第二个图之间共享,也就是说,它应该出现在第一个和第二个图的中间左侧。我该怎么做?

4 个答案:

答案 0 :(得分:3)

我能想到的最好的方法是将文本添加到图形本身并将其放置在中心(图形坐标为0.5),如此

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

One = range(1,10)
Two = range(5, 14)
l = len(One)
fig = plt.figure(figsize=(10,6))
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3])

ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)

ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)

ax2 =  plt.subplot(gs[2])
ax2.bar(range(l), One)

fig.text(0.075, 0.5, "Number of occurrence", rotation="vertical", va="center")

plt.show()

答案 1 :(得分:0)

不是一个非常复杂的解决方案,但这会有效吗?取代

plt.ylabel("Number of occurrence")

plt.ylabel("Number of occurrence", verticalalignment = 'top')

<强> [编辑]

对于我的64位python版本(2.7.3)我需要进行一些小改动

plt.ylabel("Number of occurrence", horizontalalignment = 'right')

这就是我的样子,这不是你想要的吗?

enter image description here

答案 2 :(得分:0)

我认为这个问题更多的是创建多轴,如果用正确的术语说的话。我想向您们提出我提出的问题以及我收到的答案,它为您提供了为情节创建多轴的解决方案。

链接到Matplotlib中的类似问题解决方案: Using Multiple Axis

与其他相关问题的链接是:multiple axis in matplotlib with different scales

答案 3 :(得分:0)

您还可以使用y的{​​{1}}参数手动调整位置:

ylabel

enter image description here