使用matplotlib的Python直方图

时间:2013-08-17 23:40:41

标签: python list matplotlib histogram

我编写了一个python脚本,用于解析跟踪文件并检索包含车辆ID,时间步长和特定车辆无线电范围内其他车辆数量的对象列表(车辆对象):

for d_obj in global_list_of_nbrs:
    print "\t", d_obj.id, "\t", d_obj.time, "\t", d_obj.num_nbrs

我正在使用的测试文件的示例输出是:

0   0   1
0   1   2
0   2   0
1   0   1
1   1   2
2   0   0
2   1   2

这可以解释为在时间步长0时具有id 0的车辆具有1个相邻车辆,在时间步长1处具有id 0的车辆具有2个相邻车辆(即,在无线电范围内)等。

我想使用matplotlib绘制直方图来表示这些数据,但我对应该如何处理垃圾箱以及我应该如何表示列表(目前是对象列表)感到困惑。

有人可以就此提出建议吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

以下是您可以对此数据集执行某些操作的示例:

注意:您需要为此示例安装pandas才能为您效劳。

n = 10000
id_col = randint(3, size=n)
lam = 10
num_nbrs = poisson(lam, size=n)

d = DataFrame({'id': id_col, 'num_nbrs': num_nbrs})

fig, axs = subplots(2, 3, figsize=(12, 4))

def plotter(ax, grp, grp_name, method, **kwargs):
    getattr(ax, method)(grp.num_nbrs.values, **kwargs)
    ax.set_title('ID: %i' % grp_name)

gb = d.groupby('id')

for row, method in zip((0, 1), ('plot', 'hist')):
    for ax, (grp_name, grp) in zip(axs[row].flat, gb):
        plotter(ax, grp, grp_name, method)

enter image description here

我所做的是为3个ID中的每一个创建2个图。第一行显示每个ID的邻居数量随时间的变化。底行显示了时间上邻居数量的分布。

您可能想要使用sharing axes提供的axes labellingall the other fun thingsmatplotlib