我正在尝试绘制一些子图,但似乎无法共享轴。我看过其他代码,他们似乎完全按照我的尝试做,但我的似乎没有做任何事情。
我只是想在左侧的四个子图中共享各自的轴,同时将最右侧的子图分开。
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()
Run Code Online (Sandbox Code Playgroud)
如您所见,尽管在 plt.subplot 命令中添加了 sharex 和 sharey 参数,但返回的图显示了所有唯一的子图。
我确定我犯了一个小错误,但我过去曾尝试过,并记得我遇到了同样的问题!任何帮助表示赞赏,以及替代方法的建议。甚至网站也包含做同一件事的各种方法,这有点令人困惑。
您快到了。您正在正确共享轴,但需要使某些子图的轴不可见(按照Shared Axis Demo 的指示):
plt.setp(ax1.get_xticklabels(), visible=False)
Run Code Online (Sandbox Code Playgroud)
在您的代码中,这可能如下所示:
# 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()
Run Code Online (Sandbox Code Playgroud)
该代码加上导入/声明的 x 和 y 数据,结果为:
但是,这里有一个更好的演示,用于创建具有共享轴的子图。我看到的共享轴的最佳解决方案使用该.subplots()函数来提高代码的可读性/简单性,例如:
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')
Run Code Online (Sandbox Code Playgroud)
祝你好运。
| 归档时间: |
|
| 查看次数: |
6360 次 |
| 最近记录: |