熊猫条形图与连续x轴

时间:2017-05-29 21:22:46

标签: pandas

我尝试在pandas中制作条形图,其中两个数据系列来自groupby:

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose().plot(kind='bar', layout=(2,2))

x轴不连续,仅显示数据集中的值。在这个例子中,它从11跳到13。

如何让它连续?

BarChart

**编辑2:**

我尝试过JohnE数据中心方法,但它确实有效。它创建一个没有缺失值的新索引:

temp = data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose()
temp.reindex(np.arange(temp.index.min(), temp.index.max())).plot(kind='bar', layout=(2,2))

Result

但是,我认为应该有一个更好的方法,直方图而不是条形图。我可以用直方图做的最好的是:

data.groupby(['popup','UID']).size().groupby(level=0).plot(kind='hist', bins=30, alpha=0.5, layout=(2,2), legend=True)    

Result

但是我没有在hist plot中找到任何选项来获得与条形图相同的渲染,没有条形重叠。

**编辑:**以下是回答评论的一些信息。

数据样本:

     INSEE   C1  popup   C3                  date  \
0  75101.0  0.0      0  NaN  2017-05-17T13:20:16Z   
0  75101.0  0.0      0  NaN  2017-05-17T14:23:51Z   
1  31557.0  0.0      1  NaN  2017-05-17T14:58:27Z   

                                    UID
0  ba4bd353-f14d-4bc5-95ba-6a1f5134cc84   
0  ba4bd353-f14d-4bc5-95ba-6a1f5134cc84   
1  bafe9715-3a07-4d9b-b85c-0bbf658a9115   

第一组结果(样本):

data.groupby(['popup','UID']).size().head(3)
popup  UID                                 
0      016d3e7e-1901-4f84-be0e-117988ec57a8    6
       01c15455-29cc-4d1e-8743-638fd0f51602    6
       03fc9eb0-c5fb-4205-91f0-4b74f78a8b96    3
dtype: int64

第二组结果(样本):

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().head(3)
popup   
0      1    46
       3    23
       4    22
dtype: int64

拆散和转置后:

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose().head(3)

popup     0     1
1      46.0  38.0
2      21.0  35.0
3      23.0  22.0

1 个答案:

答案 0 :(得分:0)

有一个来自matplotlib.axes.Axes.hist的直方图的解决方案。为此目的,最好使用柱状图而不是条形图,因为我们可以选择箱的数量。

# Separate groups by 'popup' and count number of records for each 'UID'
popup_values = data['popup'].unique()
count_by_popup = [data[data['popup'] == popup_value].groupby(['UID']).size() for popup_value in popup_values]

# Create histogram
fig, ax = plt.subplots()
ax.hist(count_by_popup, 20, histtype='bar', label=[str(x) for x in popup_values])
ax.legend()
plt.show()