Pyplot自动排序y值

rob*_*and 6 matplotlib frequency-analysis

我在我最喜欢的节目的剧集中对词进行了频率分析.我正在制作plot.barh(s1e1_y,s1e1_x),但它按字而不是值排序.输出>>> s1e1_y

['know', 'go', 'now', 'here', 'gonna', 'can', 'them', 'think', 'come', 'time', 'got', 'elliot', 'talk', 'out', 'night', 'been', 'then', 'need', 'world', "what's"]
Run Code Online (Sandbox Code Playgroud)

>>>s1e1_x

[42, 30, 26, 25, 24, 22, 20, 19, 19, 18, 18, 18, 17, 17, 15, 15, 14, 14, 13, 13] 实际绘制图表时,即使绘图列表未排序,图表的y轴刻度也会按字母顺序排序...

s1e1_wordlist = []
s1e1_count = []
for word, count in s1e01:
    if((word[:-1] in excluded_words) == False):
        s1e1_wordlist.append(word[:-1])
        s1e1_count.append(int(count))
s1e1_sorted = sorted(list(sorted(zip(s1e1_count, s1e1_wordlist))), 
reverse=True)
s1e1_20 = []
for i in range(0,20):
    s1e1_20.append(s1e1_sorted[i])
s1e1_x = []
s1e1_y = []
for count, word in s1e1_20:
    s1e1_x.append(word)
    s1e1_y.append(count)
plot.figure(1, figsize=(20,20))
plot.subplot(341)
plot.title('Season1 : Episode 1')
plot.tick_params(axis='y',labelsize=8)
plot.barh(s1e1_x, s1e1_y)
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 7

从matplotlib 2.1开始,您可以绘制分类变量.这允许绘图plt.bar(["apple","cherry","banana"], [1,2,3]).但是在matplotlib 2.1中,输出将按类别排序,因此按字母顺序排序.这被认为是bug并且在matplotlib 2.2中被更改(参见此PR).

在matplotlib 2.2中,条形图因此将保留顺序.在matplotlib 2.1中,您可以将数据绘制为2.1之前的任何版本中的数字数据.这意味着根据索引绘制数字并相应地设置标签.

w = ['know', 'go', 'now', 'here', 'gonna', 'can', 'them', 'think', 'come', 
 'time', 'got', 'elliot', 'talk', 'out', 'night', 'been', 'then', 'need', 
 'world', "what's"]
n = [42, 30, 26, 25, 24, 22, 20, 19, 19, 18, 18, 18, 17, 17, 15, 15, 14, 14, 13, 13]

import matplotlib.pyplot as plt
import numpy as np

plt.barh(range(len(w)),n)
plt.yticks(range(len(w)),w)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述