gpt4 book ai didi

python - 多个子图的 GridSpec "the figure containing the passed axes is being cleared"

转载 作者:行者123 更新时间:2023-12-03 09:43:20 29 4
gpt4 key购买 nike

我有 4 个不同的 df.hist(columns=, by=)我想插入到 GridSpec(2, 2) 中。

它们中的每一个都如下所示:

enter image description here

这是代码:

stuff = [df1, df2, df4, df3]
col = ['blue', 'orange', 'grey', 'green']
fig = plt.figure(figsize=(10,10))
gs = gridspec.GridSpec(2, 2)

for i in range(0, len(stuff)):
ax = plt.subplot(gs[i])
stuff[i].hist(column='quanti_var', by=stuff[i].quali_var, alpha=.5, color=col[i], ax=ax)

我有以下 UserWarning :
C:\Anaconda3\lib\site-packages\pandas\tools\plotting.py:3234: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
"is being cleared", UserWarning)

而不是我正在寻找的输出:

enter image description here

我尝试了几种方法,包括使用 SubplotSpec没有成功。任何的想法 ?

谢谢你们把你们的神经元借给我!

最佳答案

解决方法是放置matplotlib Axes pd.DataFrame.hist() 返回的对象成具有所需布局的图形。不幸的是,放置新 Axes对象到现有 Figure有点牵连。
GridSpec布局

使用嵌套 matplotlib.gridspec.GridSpec 创建您想要的布局并不太复杂s(参见 here 示例)。像这样的东西。

import matplotlib.gridspec as gs

num_outer_columns = 2
num_outer_rows = 2
num_inner_columns = 2
num_inner_rows = 3

outer_layout = gs.GridSpec(num_outer_rows, num_outer_columns)
inner_layout = []

for row_num in range(num_outer_rows):
inner_layout.append([])
for col_num in range(num_outer_columns):
inner_layout[row_num].append(
gs.GridSpecFromSubplotSpec(
num_inner_rows,
num_inner_columns,
outer_layout[row_num, col_num]
)
)

您可以使用 ax = plt.subplot(inner_layout[outer_row_num][outer_col_num][inner_row_num, inner_col_num]) 在此网格中创建子图并妥善存放 ax s 稍后。

复制 Axes进入现有 Figure
您的 df.hist()调用将产生如下内容:

In [1]: dframe.hist(column=x, by=y)
Out[1]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x1189be160>,
<matplotlib.axes._subplots.AxesSubplot object at 0x118e3eb50>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x118e74d60>,
<matplotlib.axes._subplots.AxesSubplot object at 0x118ea8340>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x118e76d62>,
<matplotlib.axes._subplots.AxesSubplot object at 0x118ea9350>]],
dtype=object)

现在您只需更换 ax之前使用您的 inner_layout 定位的对象与 AxesSubplot上面返回的对象。不幸的是没有方便的 ax.from_axes(other_ax)方法来做到这一点,所以你必须复制 Axes返回者 df.hist()通过关注 this answer 手动结束.

关于python - 多个子图的 GridSpec "the figure containing the passed axes is being cleared",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32371571/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com