如何处理熊猫栏情节中的恼人差距

时间:2017-02-17 23:27:20

标签: python pandas matplotlib bar-chart

我想在下面的条形图中修复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)进行绘图。

3 个答案:

答案 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 :(得分: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

答案 2 :(得分:1)

您每年绘制两个数据集。因此,在x轴上的每个节点处,绘制了两个数据集的两个条。您无法看到它们,因为值为零。我认为关键字stacked=True可能有效。这会垂直堆叠两个数据集,不显示间隙。

相关问题