我想在GridSpec(2,2)中插入4个不同的df.hist(columns=, by=)
。
他们每个人都是这样的:
以下是代码:
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)
我有以下用户警告:
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)
而不是我要找的输出:
我尝试了几件事,包括使用SubplotSpec
但没有成功。有什么想法吗?
谢谢你们把你的神经元借给我!
答案 0 :(得分:0)
解决方案是将matplotlib
返回的Axes
pd.DataFrame.hist()
对象放入具有所需布局的图形中。不幸的是,将新的Axes
对象放置到现有的Figure
中有点麻烦。
GridSpec
布局使用嵌套的matplotlib.gridspec.GridSpec
来创建所需的布局并不太复杂(有关示例,请参见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
以便以后使用。
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)
方法来执行此操作,因此,您必须按照this answer手动复制Axes
返回的df.hist()
。