python:使用matplotlib使用字典绘制条

有什么方法使用matplotlib使用直接从dict的数据绘制条形图吗?

我的dict看起来像这样:

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

我期待

fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
bar = ax.bar(D,range(1,len(D)+1,1),0.5)

工作,但它不。

这里是错误:

>>> ax.bar(D,range(1,len(D)+1,1),0.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 4904, in bar
    self.add_patch(r)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1570, in add_patch
    self._update_patch_limits(p)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1588, in _update_patch_limits
    xys = patch.get_patch_transform().transform(vertices)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 580, in get_patch_transform
    self._update_patch_transform()
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 576, in _update_patch_transform
    bbox = transforms.Bbox.from_bounds(x, y, width, height)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/transforms.py", line 786, in from_bounds
    return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found
你可以做两行,首先绘制条形图,然后设置适当的刻度:

import matplotlib.pyplot as plt

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

plt.bar(range(len(D)), D.values(), align='center')
plt.xticks(range(len(D)), D.keys())

plt.show()

注意,倒数第二行应该在python3中读取plt.xticks(range(len(D)),list(D.keys())),因为D.keys()返回一个生成器,而matplotlib不能直接使用。

http://stackoverflow.com/questions/16010869/python-plot-a-bar-using-matplotlib-using-a-dictionary

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python:使用matplotlib使用字典绘制条