我想在matplotlib中创建一个子图,例如,2行和2列,但我只有3个要绘制的内容,并希望将左下角子图保持为空。但是,我仍然希望在那个位置有一个y轴标签,它应该指向整个第二行。
到目前为止,这是我的代码:
import matplotlib.pyplot as plt
x = [0, 1]
y = [2, 3]
ax = plt.subplot2grid((2, 2), (0, 0))
ax.plot(x, y)
ax.set_ylabel('first row')
ax = plt.subplot2grid((2, 2), (0, 1))
ax.plot(x, y)
ax = plt.subplot2grid((2, 2), (1, 0))
ax.set_ylabel('second row')
# ax.axis('off') <---- This would remove the label, too
ax = plt.subplot2grid((2, 2), (1, 1))
ax.plot(x, y)
plt.show()
我尝试过使用axis('off')
,但也删除了标签。 (同样,如果我将它向上移动一行,即高于ax.set_ylabel('second row')
。
所以到目前为止的结果看起来像这样:
我希望空白框(不仅仅是它的黑色边框或刻度和刻度标签)消失。这是可能的,如果是的话,我该如何实现呢?
答案 0 :(得分:1)
不幸的是,您需要单独删除轴的元素以保留ylabel,因为ylabel本身也是轴的元素。
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2,2)
fig.set_facecolor("#ecfaff")
for i, ax in enumerate(axes.flatten()):
if i!=2:
ax.plot([3,4,6])
if not i%2:
ax.set_ylabel("My label")
# make xaxis invisibel
axes[1,0].xaxis.set_visible(False)
# make spines (the box) invisible
plt.setp(axes[1,0].spines.values(), visible=False)
# remove ticks and labels for the left axis
axes[1,0].tick_params(left=False, labelleft=False)
#remove background patch (only needed for non-white background)
axes[1,0].patch.set_visible(False)
plt.show()