如何为数据框中的每个单独类别绘制一周中的每一天

时间:2019-02-25 11:53:07

标签: python pandas matplotlib

我有一个示例数据框,如下所示:

Cat      Mon  Tues  Weds  Thurs  Fri  Sat  Sun
red      23    34    1     10    30   500   9 
yellow   23    34    11    31    22   20    9 
blue     23    34    123   10    412  4     9 
black    23    34    11    321   53   7     9 

etc......

我正在尝试绘制每个“猫”栏在一周中每一天的发生情况。因此,将一周中每一天的发生次数计数绘制在子图上。

因此,例如在上述数据框中,将有4个子图。对于每个支持,我们将有7个小节代表相应天的计数。

如果有人有任何建议,那就太好了,谢谢。

2 个答案:

答案 0 :(得分:2)

您可以先使用T,然后再使用plot.bar()

df.T.plot.bar(subplots=True, layout=(2,2), figsize=(15,10));

输出:

enter image description here

答案 1 :(得分:2)

好吧,答案已经被接受,但我认为无论如何我都会贡献这个解决方案。看到相同问题的多种解决方案总是很高兴。

我喜欢使用matplotlib直接进行绘制,因为更容易将图形调整为完全符合我们的期望。我也喜欢这种解决方案,因为很容易为猫上色(即使用红色条形图绘制红色猫)

让我们先导入数据:

import pandas as pd
from io import StringIO
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_fwf(StringIO("""
Cat      Mon  Tues  Weds  Thurs  Fri  Sat  Sun
red      23    34    1     10    30   500   9 
yellow   23    34    11    31    22   20    9 
blue     23    34    123   10    412  4     9 
black    23    34    11    321   53   7     9
"""), header=1)

接下来,我们进行绘图,确保绘图上的颜色合理(即,红色猫的数量没有用蓝色条表示):

fig, ax = plt.subplots(2, 2)

color = ['C3', 'C8', 'C0', 'k']
ax = ax.reshape(4)
for i in range(4):
    ax[i].bar(np.r_[:7], df.T[i][1:], color=color[i])
    ax[i].set_xticks(np.r_[:7])
    ax[i].set_xticklabels(['Mon', 'Tue', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'], rotation=90)

fig.tight_layout()

所有这些给了我以下内容:

enter image description here