上图展示了不同食物中蛋白质含量的柱状体,原本应该是降序的,但是中间窜出来一个奇怪的“豆粕”,于是我检查code:
plt.barh(y=foodLabel_n, width=nutInt_n, color='orange')
plt.title('%s content of each food' % nut.split('_')[0],
fontsize=18, fontweight='bold', fontstyle='italic')
plt.xlabel('含量 / %s' % nut.split('_')[1].lower())
plt.ylabel('食品')
plt.show()
但是排序调用的是python的sorted,应该不会出错啊,打印数据一看发现,原来是数据本身的问题
[880, 841, 1247, 1000, 865, 866, 871, 1393, 1388, 1048, 1197, 979, 1493, 965, 838, 951, 847, 801, 1194, 981, 1196, 628, 972, 869, 945, 836, 946, 2, 1328, 840]
['豆粕', '大豆(干烤)', '鸡蛋粉(全蛋粉)', '海米(虾米)', '枝竹', '腐竹', '豆腐皮', '牛肉干', '咖喱牛肉干', '鱼片干', '奶豆腐(鲜)', '蛏干', '酵母(干
)', '贻贝(干)', '豆粕', '海参(干)', '大豆粉(脱脂)', '豆腐(干冻)', '奶豆腐(脱脂)', '鲍鱼(干)', '奶疙瘩(奶酪干)', '大豆蛋白粉', '扇贝(干)',
'豆腐丝(干)', '鱿鱼', '大豆浓缩蛋白', '墨鱼(干)', '白鲸(肉,干)', '驼掌(骆驼掌)', '大豆分离蛋白']
[42.5, 43.32, 43.4, 43.7, 44.4, 44.6, 44.6, 45.6, 45.9, 46.1, 46.2, 46.5, 47.6, 47.8, 49.2, 50.2, 51.46, 52.47, 53.7, 54.1, 55.1, 55.56, 55.6, 57.7, 60.0,
63.63, 65.3, 69.86, 72.8, 88.32]
有两个名字一模一样的“豆粕”,但是原始数据中他们两个的营养含量不同,龟龟,怎么会搞成这样?其他妈的怪了。。。经过一番检查与百度,我发现了matplotlib的barh本身是有点问题的。。。至少对于有重复key的数据而言是有问题的。。。于是我用简单数据测试了一下:
y = ['a','b','c','d','a','e','f','g']
width = [1,4,6,8,5,10,12,14]
plt.barh(y=y, width=width, color='orange')
plt.show()
结果和我猜想一样,当存在相同y值的数据是,barh只打印width最大的那一项
这就没办法了,我只能清洗数据再来一次吧。。。