【问题标题】:Clustered barchart in matplotlib?matplotlib中的聚集条形图?
【发布时间】:2014-03-15 16:06:45
【问题描述】:

如何绘制类似于

的条形图

Clustered bar plot in gnuplot 使用 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 的演示页面中找不到示例。

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

【问题讨论】:

  • 那里 an example
  • another 示例
  • 顺便说一句,this question 的答案解释了您可能需要考虑的一些事情
  • subapp 值在 apps 之间不匹配。长度:3 vs 4,名称:I* vs C*
  • subapp 可以是任意数量的 IIC/CAR 条目,不需要匹配。

标签: python matplotlib


【解决方案1】:

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

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

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()

data.csv 上是 data

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

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2020-04-12
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2017-06-16
    相关资源
    最近更新 更多