我试图绘制一些子图,但我似乎不能共享斧头。我看过其他代码,他们似乎和我一样在做什么,但我的代码似乎什么也没做。
我只想在左边的四个子图中共享各自的轴,同时保持极右的子图是分开的。
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参数,但返回的绘图显示了所有唯一的子图。
我确信我犯了一个小错误,但我在过去尝试过,记住我也有过同样的问题!值得赞赏的任何帮助,以及关于替代办法的建议。甚至网站也包含了不同的方法来做同样的事情,这有点让人困惑。
发布于 2017-09-05 22:37:50
你快到了。您正在正确地共享轴,但需要使轴不可见(按照共享轴演示的指示)用于一些子图:
plt.setp(ax1.get_xticklabels(), visible=False)在您的代码中,这可能如下所示:
# 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()函数来提高代码的可读性/简单性,例如:
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')祝你好运。
发布于 2017-09-06 07:14:20
下面是使用plt.subplots的解决方案。这样做的想法是将2x3网格的最右边的2个轴旋转,然后在它们的位置创建一个新的子图。
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()

https://stackoverflow.com/questions/46063284
复制相似问题