Python: 在matplotlib.pyplot上绘制子列表

3

我想绘制一个包含子列表的列表,每个子列表都包含名称和分数。 子列表项一=名称作为X标签项二=分数作为Y标签

datacount = (("mike", 9), ("john", 8), ("smith", 7), ("niki", 7), ("garlick", 7),
             ("don", 7), ("ross", 7), ("darli", 6), ("nick", 6), ("perl", 6), 
             ("cat", 5), ("dona", 4))

我该如何在plt中绘制这个图表呢?
我尝试按照字典的方式绘制,但它并未显示所有名称和对应的分数。
import matplotlib.pyplot as plt
datacount = D

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

plt.show()
1个回答

0
假设您有一个元组列表,可以使用zip来解压缩X和Y元素,然后进行条形图绘制; tick_label可用于标记x轴:
import matplotlib.pyplot as plt 
%matplotlib inline

plt.figure(figsize = (10, 7))

X, Y = zip(*datacount)
ax = plt.bar(range(len(X)), Y, 0.6, align='center', tick_label = X, color="sienna") 

enter image description here


谢谢,它有效了。如何移除我的X的一些部分,其等于[('',3467),('\ n',31)?Y = 3467完全破坏了这个数字。我不能使用.remove()方法,对吧? - J.A
你可以使用列表推导来过滤你的 datacount. datacount = [x for x in datacount if x[0] not in ['', '\n']] - Psidom
谢谢,旋转很好!列表推导式非常方便,我可以设置最小/最大Y值。为什么plt.savefig("ABC.pdf")不起作用? - J.A
如果一些项目名称类似于“- / 数字”,例如“- / 210505050”、“- / 110505050”、“- / 310505050”,我该如何删除它们?datacount = [x for x in datacount if x[0] not in ['- / 2']] 并不能帮助解决问题。 - J.A
尝试使用 [x for x in datacount if not x[0].startswith("- / ")] - Psidom
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接