将列表列表绘制为条形图Python Matplotlib

时间:2016-08-22 08:16:52

标签: python matplotlib plot

我有一个列表清单,如下所示:

[[1,100.1],[2,133.222],[3,198.0]]

我试图使用这些数据在matplotlib中绘制条形图,其中列表中每个元素的第一个元素是x轴(它总是1-1000之间的整数,没有重复),第二个元素是y轴值。

我使用的是Python 3.如何绘制这个?

2 个答案:

答案 0 :(得分:3)

您需要将x值与y值分开。这可以通过zip

完成

首先:

import numpy as np
import matplotlib.pypl as plt

现在:

In [263]: lst = [[1,100.1],[2,133.222],[3,198.0]]

In [264]: xs, ys = [*zip(*lst)]

In [265]: xs
Out[265]: (1, 2, 3)

In [266]: ys
Out[266]: (100.1, 133.222, 198.0)

现在绘制条形图:

In [267]: plt.bar(xs, ys)

条形图不会自动设置条形宽度。在目前的情况下,宽度结果很好,但更系统的方法是采用x值之间的差异,如下所示:

In [269]: np.diff(xs)
Out[269]: array([1, 1])

通常你有一个等间距的x值,但不一定是这种情况。您可能希望将宽度设置为x值之间的最小差异,因此条形图可能会生成如下:

In [268]: plt.bar(xs, ys, width=0.9 * np.min(np.diff(xs)))

答案 1 :(得分:1)

我会选择这样的事情:

import matplotlib.pyplot as plt

data = [[1,100.1],[2,133.222],[3,198.0]]
x = map(lambda x: x[0], data)
y = map(lambda x: x[1], data)

plt.bar(x,y)