2

我正在尝试在同一个图中绘制几个直方图组。每个组包含两个条件,因此我使用 pandas histogram 选项中的 'by=' 参数。但是,这并没有像我预期的那样工作,pandas 会创建一个新图形,而不是在我通过的轴上绘制。我也尝试过四个轴,但还是不行。示例代码:

import pandas as pd
df = pd.DataFrame({'color': ['blue','blue','yellow','blue','yellow'], 'area': [2,2,3,4,4]})
fig, (ax1, ax2) = plt.subplots(1,2)
df.area.hist(by=df.color, ax=ax1)

我正在使用熊猫 0.12.0、matplotlib 1.3.0 和 python 2.7.5。欢迎任何导致在同一个子图网格中组合/拼接多个“hist(by=)-plots”的建议。

更新:

也许这更准确地描述了我想要实现的目标。

import pandas as pd
df = pd.DataFrame({'color': ['blue','blue','yellow','blue','yellow'], 'area': [2,2,3,4,4]})
#fig, (ax1, ax2) = plt.subplots(1,2)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2)
ax3.plot([[2,2], [3,6]])
ax4.plot([[3,6], [2,2]])
df.area.hist(by=df.color, ax=ax1)

理想情况下,在我的示例中,pandas 直方图为 1,2,然后应将 ax1 拆分为两个子图。或者,可以将其绘制到 ax1 和 ax2 中,然后用户可以确保有正确数量的空子图可用。

4

1 回答 1

1

从 GH7736 开始,此问题已修复,已合并到 pandas 0.15.0

将多个绘图传递到现有图形的正确方法是首先创建所有所需的轴,然后将它们全部传递给 pandas 绘图命令。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'color': ['blue','blue','yellow','blue','yellow'], 'area': [2,2,3,4,4]})
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2)
#Hide upper left corner plot and create two new subplots
ax1.axis('off')
ax = fig.add_subplot(2,4,1)
ax0 = fig.add_subplot(2,4,2)
#Plot
ax3.plot([[2,2], [3,6]])
ax4.plot([[3,6], [2,2]])
df.area.hist(by=df.color, ax=(ax,ax0)) #Pass both new subplots

在此处输入图像描述

您可以使用GridSpec更优雅地创建子图

于 2015-01-26T16:30:48.983 回答