2017-02-17 97 views
2

我想在下面的条形图中解决2012年和2013年之间的差距。如何应对熊猫酒吧阴谋中的烦人缺口

enter image description here

我的数据帧是

In [30]: df 
Out[30]: 
      Pre-Release Post-Release 
FinishDate 
2008    1.0   0.0 
2009    18.0   0.0 
2010    96.0   0.0 
2011    161.0   0.0 
2012    157.0   0.0 
2013    0.0   139.0 
2014    0.0   155.0 
2015    0.0   150.0 
2016    0.0   91.0 
2017    0.0   15.0 

和我使用df.plot(kind='bar', width=1)绘制。

+0

'align ='center'' ?? – jojo

+1

感谢您的猜测,但这并没有消除差距。 – lanery

+1

差距是一个'合法'的差距,因为你一次绘制两个变量。将零更改为10.0,您将看到发生了什么(它并排绘制前后图)。 –

回答

3

图中没有实际的“差距”:熊猫只是预留空间来绘制两个不同的酒吧彼此相邻。就拿这一段代码来说明:

from io import StringIO 
import pandas as pd 
TESTDATA=StringIO("""2008    1.0   0.0 
2009    18.0   5.0 
2010    96.0   0.0 
2011    161.0   0.0 
2012    157.0   0.0 
2013    0.0   139.0 
2014    0.0   155.0 
2015    0.0   150.0 
2016    0.0   91.0 
2017    0.0   15.0""") 
df=pd.read_csv(TESTDATA,delim_whitespace=True,index_col=0) 
df.plot(kind='bar') 

Two bars next to each other

但你实际上并不永远需要打印两杆彼此相邻,因此而不是绘图数据框,您可以绘制两个系列成同一图中:

ax=df['1.0'].plot(kind='bar') 
df['0.0'].plot(kind='bar',ax=ax,color='orange') 

enter image description here

或者只是使用:

df.plot(kind='bar', stacked=True) 

在这种情况下给出了相同的结果。

1

这个差距实际上通常是想要的行为,因为您在这里有效地绘制了两个直方图。

然而,在这种情况下,报告的值似乎是排他性的,因此不需要并排绘制直方图,而只需绘制一个,然后再绘制另一个。

这里是一个小例子,应该让你在那里:

import matplotlib.pyplot as plt 
import numpy as np 
import pandas 

someDF = pandas.DataFrame({'1':np.random.uniform(size=20)*10, '2':np.random.uniform(size=20)*10}) 

cut = 10 
fig, ax = plt.subplots(figsize=(8,3)) 

first = someDF['1'][someDF.index >= cut] 
second = someDF['2'][someDF.index < cut] 

ax.bar(left=first.index, height=first, align='center', color='blue') 
ax.bar(left=second.index, height=second, align='center', color='red') 
plt.show() 

输出看起来则是这样的: enter image description here

1

您绘制两个数据集每年。因此,在x轴上的每个节点上绘制了两个数据集的条形图。你看不到它们,因为这些值是零。我认为关键字stacked=True可能会起作用。这将垂直堆叠两个数据集,并且不显示间隙。