【发布时间】:2018-12-14 12:55:29
【问题描述】:
我目前正在尝试使用 GridSpec 在 Matplotlib(Python 3.6、Matplotlib 2.0.0)中绘制许多子图。这是最小的工作示例:
import matplotlib.pyplot as plt
from matplotlib.gridspec import *
# Color vector for scatter plot points
preds = np.random.randint(2, size=100000)
# Setup the scatter plots
fig = plt.figure(figsize=(8,8))
grid = GridSpec(9, 9)
# Create the scatter plots
for ii in np.arange(0, 9):
for jj in np.arange(0, 9):
if (ii > jj):
ax = fig.add_subplot(grid[ii, jj])
x = np.random.rand(100000)*2000
y = np.random.rand(100000)*2000
ax.scatter(x, y, c=preds)
这是未经任何修改的结果:
当然,子图之间的间距不能令人满意,所以我做了我通常做的事情并使用了tight_layout()。但是从下图中可以看出,tight_layout() 压缩了地块的宽度让人无法接受:
我认为我应该使用 subplots_adjust() 手动调整子图,而不是使用 tight_layout()。下图为subplots_adjust(hspace=1.0, wspace=1.0)。
结果几乎是正确的,再稍微调整一下子图之间的空间就会很完美。然而,子图似乎太小而无法充分传达信息。
有没有更好的方法来获得子图之间的适当间距,同时仍保持纵横比和足够大的子图大小?我能想到的唯一可能的解决方案是使用subplots_adjust() 和更大的figsize,但这会导致图形边缘和子图之间的空间非常大。
感谢任何解决方案。
【问题讨论】:
-
如果您可以使用 matplotlib 的替代品,您可能想看看Plotly subplots。
标签: python matplotlib subplot