首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >plt.subplot轴共享不工作

plt.subplot轴共享不工作
EN

Stack Overflow用户
提问于 2017-09-05 21:00:06
回答 2查看 8.9K关注 0票数 6

我试图绘制一些子图,但我似乎不能共享斧头。我看过其他代码,他们似乎和我一样在做什么,但我的代码似乎什么也没做。

我只想在左边的四个子图中共享各自的轴,同时保持极右的子图是分开的。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

# set the data
x_data = np.linspace(0, 10)
y_data_1 = np.sin(x_data)
y_data_2 = np.cos(x_data)
y_data_3 = [i / 2 for i in y_data_1]
y_data_4 = [j / 2 for j in y_data_2]

# make the plot
ax1 = plt.subplot(2,3,1)
plt.plot(x_data, y_data_1)

ax2 = plt.subplot(2,3,2, sharey=ax1)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)

ax3 = plt.subplot(1,3,3)
plt.plot(x_data)

ax4 = plt.subplot(2,3,4, sharex=ax1)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)
plt.plot(x_data, y_data_3)

ax5 = plt.subplot(2,3,5, sharex=ax2, sharey=ax4)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)
plt.plot(x_data, y_data_3)
plt.plot(x_data, y_data_4)

plt.show()

如您所见,尽管在plt.subplot命令中添加了sharex和sharey参数,但返回的绘图显示了所有唯一的子图。

我确信我犯了一个小错误,但我在过去尝试过,记住我也有过同样的问题!值得赞赏的任何帮助,以及关于替代办法的建议。甚至网站也包含了不同的方法来做同样的事情,这有点让人困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-05 22:37:50

你快到了。您正在正确地共享轴,但需要使轴不可见(按照共享轴演示的指示)用于一些子图:

代码语言:javascript
复制
plt.setp(ax1.get_xticklabels(), visible=False)

在您的代码中,这可能如下所示:

代码语言:javascript
复制
# make the plot
ax1 = plt.subplot(2, 3, 1)
plt.plot(x_data, y_data_1)
plt.setp(ax1.get_xticklabels(), visible=False)

ax2 = plt.subplot(2, 3, 2, sharey=ax1)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)

ax3 = plt.subplot(1, 3, 3)
plt.plot(x_data)

ax4 = plt.subplot(2, 3, 4, sharex=ax1)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)
plt.plot(x_data, y_data_3)

ax5 = plt.subplot(2, 3, 5, sharex=ax2, sharey=ax4)
plt.plot(x_data, y_data_1)
plt.plot(x_data, y_data_2)
plt.plot(x_data, y_data_3)
plt.plot(x_data, y_data_4)
plt.setp(ax5.get_yticklabels(), visible=False)

plt.show()

该代码加上导入/声明的x和y数据,结果是:

但是,有一个更好的演示这里来创建具有共享轴的子图。我看到的共享轴的最佳解决方案使用.subplots()函数来提高代码的可读性/简单性,例如:

代码语言:javascript
复制
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')

祝你好运。

票数 7
EN

Stack Overflow用户

发布于 2017-09-06 07:14:20

下面是使用plt.subplots的解决方案。这样做的想法是将2x3网格的最右边的2个轴旋转,然后在它们的位置创建一个新的子图。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10)

fig, ((ax1, ax2, aux1), (ax3, ax4, aux2)) = plt.subplots(2, 3, sharex=True, sharey=True)

#turn rightmost 2 axes off
aux1.axis("off")
aux2.axis("off")

#create a new subplot at their position
ax5 = fig.add_subplot(133)

#plot stuff on the axes
ax1.plot(x,np.sin(x))
ax2.plot(x,np.sin(x))
ax3.plot(x,np.sin(x))
ax4.plot(x,np.sin(x))
ax5.plot(5*x,x)

plt.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46063284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档