我需要在matplotlib中生成一大堆垂直堆叠的图。结果将使用savefig
保存并在网页上查看,所以我不在乎最终图像有多高,只要子图间隔开,使它们不重叠。
不管我允许这个数字有多大,次要情节似乎总是重叠的。
我的代码目前看起来像
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
9条答案
按热度按时间67up9zun1#
请查看matplotlib: Tight Layout guide并尝试使用
matplotlib.pyplot.tight_layout
或matplotlib.figure.Figure.tight_layout
举个简单的例子:
无紧密布局
紧凑布局
n7taea2i2#
您可以使用
plt.subplots_adjust
更改子图之间的间距。调用签名:
参数含义(和建议的默认值)为:
实际的默认值由rc文件控制
jvlzgdj93#
使用
subplots_adjust(hspace=0)
或非常小的数字(hspace=0.001
)将完全删除子图之间的空白,而hspace=None
则不会。hspace=0
或hspace=0.001
hspace=None
lnvxswe24#
与
tight_layout
类似,matplotlib现在(从2.2版开始)提供了constrained_layout
。与tight_layout
相反,constrained_layout
是一个属性,它可以是活动的,并在每个绘制步骤之前优化布局。因此,它需要在子图创建之前或期间激活,例如
figure(constrained_layout=True)
或subplots(constrained_layout=True)
。示例:
constrained_layout也可以通过
rcParams
设置请参阅“What's New”条目和Constrained Layout Guide
zqdjd7g95#
plt.subplots_adjust方法:
或
图片的大小很重要。
“我尝试过打乱hspace,但增加它似乎只能使所有的图更小,而不能解决重叠问题。
因此,为了制造更多的白色空间并保持子情节大小,总图像需要更大。
mnemlml86#
你可以试试
.subplot_tool()
sxpgvts37#
pandas.DataFrame.plot
绘制 Dataframe 时解决此问题,该 Dataframe 使用matplotlib
作为默认后端。kind=
(例如'bar'
、'scatter'
、'hist'
等)。*在
python 3.8.12
、pandas 1.3.4
、matplotlib 3.4.3
中测试导入和样本数据
调整间距
1.调整
pandas.DataFrame.plot
中的默认参数1.更改
figsize
:对于每个子图,宽度为5且高度为4是开始的好地方。1.更改
layout
:(行、列)用于子图的布局。sharey=True
和sharex=True
,因此每个子图上的冗余标签不会占用空间。.plot
方法返回一个matplotlib.axes.Axes
的numpy数组,应该将其展平以便于使用。1.使用
.get_figure()
从其中一个Axes
中提取DataFrame.plot
图形对象。1.如果需要,使用
fig.tight_layout()
。df
cwtwac6a8#
fig.tight_layout
。但是,tight_layout
可以在创建地物时直接设置,因为matplotlib.pyplot.subplots
接受**fig_kw
的其他参数。* 所有额外的关键字参数都传递给pyplot.figure
调用 *。ezykj2lf9#
如果将
tight_layout=True
传递到plt.subplots()
或fig.tight_layout()
不能在子图之间增加足够的间距,请考虑使用tight_layout(pad=2.0)
这样的焊盘进行调整以获得所需的间距。