【问题标题】:Sharing axes for generated subplots matplotlib为生成的子图 matplotlib 共享轴
【发布时间】:2019-07-16 11:29:18
【问题描述】:

好吧,我把自己彻底搞糊涂了……
我有生成包含 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。由于我正在生成它们,因此代码没有任何内容可以指向。

【问题讨论】:

  • matplotlib 库/示例部分中的任何示例对您有帮助吗?
  • “每个子图都有不同的名称,您可以使用它来设置 sharex 或 sharey。由于我正在生成它们,因此代码没有任何指向”。如果您指的是graph 变量被连续覆盖的事实:您是否考虑将每个子图添加到graph[] (graph.append(fig.add_subplot(...) 的数组中?
  • 我在 matplotlib 库中找不到任何相关内容(它们都是手动构建的),不,我没有考虑将图形添加到数组中。所以,现在我觉得很愚蠢@00。我应该删除问题吗?
  • 也许,也许不是。如果你用你的解决方案自行回答,我实际上更喜欢(这样我们就可以看到你如何使用 sharex/sharey)。也许只是重要的一点,即 for 循环。有了实际答案,如果其他人遇到同样的问题,这可能是可行的(事实上,这可能已经是重复的问题,但找到合适的重复问题可能比(自己)回答问题更难)。跨度>

标签: python matplotlib subplot


【解决方案1】:

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

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)),然后只使用循环来填充它们。

但似乎仍然无法删除隐藏轴标签上的刻度线...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2023-03-14
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多