2013-10-26 492 views
2

我想在同一幅图中绘制几个直方图组。每个组包含两个条件,因此我使用熊猫直方图选项中的'by ='参数。然而,这并不像我预期的那样工作,大熊猫创造了一个新的数字,而不是在我正在通过的轴上进行绘图。我试图通过四个轴,但仍然没有去。示例代码:如何在大熊猫中用DataFrame.hist(by =)绘制特定坐标轴

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 =) - 拼图'拼接/缝合在同一个子图网格中的方法都是值得欢迎的。

更新:

也许这说明我想更准确地达到的目标。

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) 

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

+0

哪个版本您使用的? –

+0

我看到与pandas v 0.10.0相同的行为。似乎变量'ax'在创建柱状图 –

+0

熊猫0.12.0,matplotlib 1.3.0和python 2.7.5的过程中丢失了某处。该问题也增加了版本号。 –

回答

1

此作为GH7736其合并到大熊猫0.15.0

正确的方式来传递多条曲线被固定到现有的数字是先创建所有期望的轴,然后通过他们都大熊猫绘图命令。

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 

enter image description here

可以开展创造次要情节更优雅的使用熊猫GridSpec