【问题标题】:Python list of list from CSV files to create grouped bar chart来自 CSV 文件的列表的 Python 列表以创建分组条形图
【发布时间】:2011-08-03 19:58:42
【问题描述】:

我有几个这种格式的 CSV 文件,命名为 n-data.csv,其中 n 是线程数:

elapsed,label
120,Step 01
260,Step 02
113,Step 03
100,Step 01
200,Step 02
103,Step 03

我想获得每个线程(或n)的每个步骤的平均值,并将它们绘制成分组条形图,就像这样:http://matplotlib.sourceforge.net/examples/api/barchart_demo.html

我的代码适用于一个文件(感谢Yet Another list csv file in Python Question):

#!/usr/bin/env python

import csv
import sys

import pylab as p

fig = p.figure()
ax = fig.add_subplot(1,1,1)

result = dict()
av = []
idx = []
for file in sys.argv[1:]:
  for row in csv.DictReader(open(file)):
    label = row['label']
    elapsed = row['elapsed']
    if label in result:
      result[label].append(elapsed)
    else:
      result[label] = [elapsed]    
  for i in sorted (result.iterkeys()):
    s = sum(int(v) for v in result[i])
    a = s/float(len(result[i]))
    av.append(a)
    idx.append(i)

  y = av
  N = len(y)
  ind = range(N)
  ax.bar(ind, y, facecolor='#56A5EC',
          align='center',label='1 Thread') 
  ax.set_ylabel('Average Response Time')
  ax.set_title('Counts, by group',fontstyle='italic')
  ax.legend()
  ax.set_xticks(ind)
  ax.grid(color='#000000', linestyle=':', linewidth=1)
  group_labels = idx
  ax.set_xticklabels(group_labels)
  fig.autofmt_xdate()  
  p.grid(True) 
  p.show()

但是,当我使用 create_bar.py *csv 运行此脚本时,所有数据都被推送到 av(平均)和 idx(索引),并将所有数据聚合到 av 和 idx 中——它的工作原理是它应该。

如何拆分avidx 以便创建分组图表?我试过了:

    threads = file.split('-')[0]
    for count in threads
      for row in csv.DictReader(open(file)):
      ...
        av['threads'].append(a)
        idx['threads'].append(i)

无济于事。

【问题讨论】:

    标签: python list csv charts matplotlib


    【解决方案1】:

    也许有一个列表的列表......

    av = []
    idx = []
    
    for file in sys.argv[1:]:
        next_av = []
        next_idx = []
    
        ...
    
        for i in sorted (result.iterkeys()):
            s = sum(int(v) for v in result[i])
            a = s/float(len(result[i]))
            next_av.append(a)
            next_idx.append(i)
        av.append(next_av)
        idx.append(next_idx)
    
    for index in range(len(av)):
        # do something with the lists av[index] and idx[index]
    

    【讨论】:

    • 感谢@jcfollower,经过一番曲折,我得到了这个工作!
    猜你喜欢
    • 2013-09-09
    • 2021-10-14
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2017-04-08
    • 2012-12-05
    相关资源
    最近更新 更多