Python matplotlib中的群集条形图?

Python matplotlib中的群集条形图?,python,matplotlib,Python,Matplotlib,如何绘制类似于的条形图 使用python matplotlib date|name|empid|app|subapp|hours 20140101|A|0001|IIC|I1|2.5 20140101|A|0001|IIC|I2|3 20140101|A|0001|IIC|I3|4 20140101|A|0001|CAR|C1|2.5 20140101|A|0001|CAR|C2|3 20140101|A|0001|CAR|C3|2 20140101|A|0001|CAR|C4|2 尝试按应用

如何绘制类似于的条形图

使用python matplotlib

date|name|empid|app|subapp|hours
20140101|A|0001|IIC|I1|2.5
20140101|A|0001|IIC|I2|3
20140101|A|0001|IIC|I3|4
20140101|A|0001|CAR|C1|2.5
20140101|A|0001|CAR|C2|3
20140101|A|0001|CAR|C3|2
20140101|A|0001|CAR|C4|2
尝试按应用程序为同一个人绘制子应用程序小时数。在matplotlib的演示页面中看不到示例


编辑:下面引用的示例似乎都不适用于上述每个类别的不相等条数。

这些示例没有管理不相等条数,但您可以使用另一种方法。我给你举个例子

注意:我使用pandas来处理您的数据,如果您不知道,请尝试一下:

数据上。csv是数据:


还有一个示例顺便说一句,的答案解释了您可能需要考虑的一些事情
subapp
值在
app
s之间不匹配。长度:3对4,名称:
I*
vs
C*
。子应用可以是IIC/CAR的任意数量的条目,不需要匹配。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np

df = pd.read_table("data.csv",sep="|")
grouped = df.groupby('app')['hours']

colors = "rgbcmyk"

fig, ax = plt.subplots()
initial_gap = 0.1
start = initial_gap
width = 1.0
gap = 0.05
for app,group in grouped:
    size = group.shape[0]
    ind = np.linspace(start,start + width, size+1)[:-1]   
    w = (ind[1]-ind[0])
    start = start + width + gap
    plt.bar(ind,group,w,color=list(colors[:size]))

tick_loc = (np.arange(len(grouped)) * (width+gap)) + initial_gap + width/2
ax.set_xticklabels([app for app,_ in grouped])
ax.xaxis.set_major_locator(mtick.FixedLocator(tick_loc))

plt.show()
date|name|empid|app|subapp|hours
20140101|A|0001|IIC|I1|2.5
20140101|A|0001|IIC|I2|3
20140101|A|0001|IIC|I3|4
20140101|A|0001|CAR|C1|2.5
20140101|A|0001|CAR|C2|3
20140101|A|0001|CAR|C3|2
20140101|A|0001|CAR|C4|2