使用python将matplotlib直方图中的x轴值从最低值排序到最高值

使用python将matplotlib直方图中的x轴值从最低值排序到最高值,python,matplotlib,histogram,data-visualization,Python,Matplotlib,Histogram,Data Visualization,目前,我有一个脚本可以呈现以下直方图: with open('toy_two.json', 'rb') as inpt: dict_hash_gas = list() for line in inpt: resource = json.loads(line) dict_hash_gas.append({resource['first']:resource['second']}) # Count up the values counts = co

目前,我有一个脚本可以呈现以下直方图:

with open('toy_two.json', 'rb') as inpt:

    dict_hash_gas = list()
    for line in inpt:
        resource = json.loads(line)
        dict_hash_gas.append({resource['first']:resource['second']})

# Count up the values
counts = collections.Counter(v for d in dict_hash_gas for v in d.values())

counts = counts.most_common()

# Apply a threshold
threshold = 4275
counts = [list(group) for val, group in itertools.groupby(counts, lambda x: x[1] > threshold) if val]

print(counts)

根据这些数据:

{"first":"A","second":"1","third":"2"} 
{"first":"B","second":"1","third":"2"} 
{"first":"C","second":"2","third":"2"} 
{"first":"D","second":"3","third":"2"} 
{"first":"E","second":"3","third":"2"} 
{"first":"F","second":"3","third":"2"} 
{"first":"G","second":"3","third":"2"} 
{"first":"H","second":"4","third":"2"} 
{"first":"I","second":"4","third":"2"} 
{"first":"J","second":"0","third":"2"} 
{"first":"K","second":"0","third":"2"} 
{"first":"L","second":"0","third":"2"} 
{"first":"M","second":"0","third":"2"} 
{"first":"N","second":"0","third":"2"} 
这是渲染直方图数据的代码:

with open('toy_two.json', 'rb') as inpt:

    dict_hash_gas = list()
    for line in inpt:
        resource = json.loads(line)
        dict_hash_gas.append({resource['first']:resource['second']})

# Count up the values
counts = collections.Counter(v for d in dict_hash_gas for v in d.values())

counts = counts.most_common()

# Apply a threshold
threshold = 4275
counts = [list(group) for val, group in itertools.groupby(counts, lambda x: x[1] > threshold) if val]

print(counts)
它被绘制成这样:

# Transpose the data to get the x and y values
labels, values = zip(*counts[0])

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

plt.bar(indexes, values, width)
plt.xticks(indexes + width * 0.5, labels)
plt.show()
问题是,如何重新组织x轴,使其从最低到最高排列,即

0, 1, 3, 4

我认为既然您已经在使用
matplotlib
,那么在
pandas
中进行数据争用也会更有意义

In [101]: JSON = '''[{"first":"A","second":"1","third":"2"}, 
   .....: {"first":"B","second":"1","third":"2"}, 
   .....: {"first":"C","second":"2","third":"2"}, 
   .....: {"first":"D","second":"3","third":"2"}, 
   .....: {"first":"E","second":"3","third":"2"}, 
   .....: {"first":"F","second":"3","third":"2"}, 
   .....: {"first":"G","second":"3","third":"2"}, 
   .....: {"first":"H","second":"4","third":"2"}, 
   .....: {"first":"I","second":"4","third":"2"}, 
   .....: {"first":"J","second":"0","third":"2"}, 
   .....: {"first":"K","second":"0","third":"2"}, 
   .....: {"first":"L","second":"0","third":"2"}, 
   .....: {"first":"M","second":"0","third":"2"}, 
   .....: {"first":"N","second":"0","third":"2"}]
   .....: '''

In [102]: df = pd.read_json(JSON)

In [103]: df
Out[103]: 
   first  second  third
0      A       1      2
1      B       1      2
2      C       2      2
3      D       3      2
4      E       3      2
5      F       3      2
6      G       3      2
7      H       4      2
8      I       4      2
9      J       0      2
10     K       0      2
11     L       0      2
12     M       0      2
13     N       0      2

In [104]: df.groupby('second').size().plot(kind='bar')
Out[104]: <matplotlib.axes._subplots.AxesSubplot at 0x1104eac10>

但在真实的数据集上,预处理很重要——因为它比toy示例要大得多,也更复杂,所以之后就不再是JSON格式了。在数据通过该预处理流水线之后,是否有某种方法来实现这一点?在这种情况下,您可以考虑建立一个临时数据文件,按标签排序,然后进行绘图。请参见编辑。