在python中对数据进行排序以从高到低显示条形图

在python中对数据进行排序以从高到低显示条形图,python,matplotlib,Python,Matplotlib,我有一大堆数字,想把它们画成条形图(比如柱状图) 我已经让图表工作了,但它是按照我输入值的顺序,而不是从最高到最低的顺序,这是我想要的 以下是迄今为止的代码: phenos = [128, 20, 0, 144, 4, 16, 160, 136, 192, 52, 128, 20, 0, 4, 16, 144, 130, 136, 132, 22, 128, 160, 4, 0, 32, 36, 132, 136, 164, 130, 128, 22, 4, 0, 144, 160, 54,

我有一大堆数字,想把它们画成条形图(比如柱状图)

我已经让图表工作了,但它是按照我输入值的顺序,而不是从最高到最低的顺序,这是我想要的

以下是迄今为止的代码:

 phenos = [128, 20, 0, 144, 4, 16, 160, 136, 192, 52, 128, 20, 0, 4, 16, 144, 130, 136, 132, 22, 
128, 160, 4, 0, 32, 36, 132, 136, 164, 130, 128, 22, 4, 0, 144, 160, 54, 130, 178, 132, 
128, 4, 0, 136, 132, 68, 196, 130, 192, 8, 128, 4, 0, 20, 22, 132, 144, 192, 130, 2, 
128, 4, 0, 132, 20, 136, 144, 192, 64, 130, 128, 4, 0, 144, 132, 28, 192, 20, 16, 136, 
128, 6, 4, 134, 0, 130, 160, 132, 192, 2,  128, 4, 0, 132, 68, 160, 192, 36, 64, 
128, 4, 0, 136, 192, 8, 160, 12, 36, 128, 4, 0, 22, 20, 144, 86, 132, 82, 160,
128, 4, 0, 132, 20, 192, 144, 160, 68, 64, 128, 4, 0, 132, 160, 144, 136, 192, 68, 20]

from collections import Counter
import numpy as np
import matplotlib.pyplot as plt


labels, values = zip(*Counter(phenos).items())

indexes = np.arange(len(labels))
width = 1

plt.bar(indexes, values, width)
plt.xticks(indexes + width * 0.5, labels)
plt.show()
它生成以下图片。对不起,标签都弄脏了

我希望它从最高到最低。。。有人知道我如何做到这一点而不改变我的表现吗?我试过了

phenos.sort()
在我画图表之前,但这并没有改变图表。提前谢谢

排序
计数器(phenos).items()
首先:

In [40]: from collections import Counter
    ...: import numpy as np
    ...: import matplotlib.pyplot as plt
    ...: from operator import itemgetter
    ...: 
    ...: c = Counter(phenos).items()
    ...: c.sort(key=itemgetter(1))
    ...: labels, values = zip(*c)
    ...: 
    ...: indexes = np.arange(len(labels))
    ...: width = 1
    ...: 
    ...: plt.bar(indexes, values, width)
    ...: plt.xticks(indexes + width * 0.5, labels)
    ...: plt.show()

输出:


或者,如果要按x轴排序,只需使用
itemgetter(0)

其中包括:

为什么不与
bins=set(phenos)
一起使用?例子:
c.sort(key=itemgetter(0))