共享生成的子图的轴matplotlib

时间:2019-07-16 11:29:18

标签: python matplotlib subplot

好的,我感到非常困惑...
我的代码正在生成包含8个子图的图形

import numpy as np
import matplotlib.pyplot as plt

names = ["one", "two", "three", "four", "five", "six", "seven", "eight"]
x = np.arange(1,11)
y = x**2.
z = x**1.5

fig = plt.figure()

fig.text(0.5, 0.02, "X axis", ha='center', fontsize=12)
fig.text(0.03, 0.5, "Y axis", va='center', rotation='vertical', fontsize=12)
palette = plt.get_cmap('tab10')

for name in names:
    i = names.index(name)+1 # What sub-plot are we on?
    graph = fig.add_subplot(4, 2, i)
# Add a new subplot to go in the grid (4x2)
    graph.set_title(f"plot {name}", fontsize=11)
    plot = graph.plot(x, y, color=palette(1))
    plot = graph.plot(x, z, color=palette(0))


plt.subplots_adjust(
top=0.93,
bottom=0.116,
left=0.124,
right=0.977,
hspace=0.972,
wspace=0.165)


plt.show()

它工作正常,但我无法确定如何设置子图以共享x和y轴(我只希望x轴和左边缘的底边上的轴)。我能够找到的所有示例似乎都依赖于每个具有不同名称的子图,可用于设置sharexsharey。由于我一直在生成它们,因此代码没有指向的内容。

1 个答案:

答案 0 :(得分:0)

根据评论,这是一个有效的答案

fig, axs = plt.subplots(4, 2, sharex='all', sharey='all')
graphs = axs.flatten()

for ax in graphs:
    ax.plot(x,y,color=palette(0))
    ax.plot(x,z,color= palette(1))

我已经从上面的fig.addplot版本更改为可以预先设置所有子图(plt.subplots(y,x))的版本,然后仅使用循环来填充它们。

尽管如此,似乎仍然无法删除隐藏轴标签上的刻度线...