python:使用matplotlib使用字典绘制一个栏
有没有什么办法用matplotlib
直接从字典中使用数据绘制条形图?
我的字典看起来像这样:
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不能直接使用。
为了将来的参考,上面的代码不适用于Python 3.对于Python 3,D.keys()需要转换为列表。
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)), list(D.keys())) plt.show()