Pyplot автоматически сортирует значения y

У меня частотный анализ слов, сказанных в эпизодах моего любимого шоу. Я делаю 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"] 

и >>>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) 

2 Solutions collect form web for “Pyplot автоматически сортирует значения y”

Из matplotlib 2.1 вы можете отображать категориальные переменные. Это позволяет plt.bar(["apple","cherry","banana"], [1,2,3]) . Однако в matplotlib 2.1 выход будет сортироваться по категориям, поэтому в алфавитном порядке. Это считалось ошибкой и было изменено в 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() 

введите описание изображения здесь

Хорошо, у вас в вашем примере много паразитного кода, который не имеет отношения к проблеме, как вы ее описали, но предполагая, что вы не хотите, чтобы ось y сортировалась в алфавитном порядке, тогда вам нужно застегнуть два списка в dataframe затем постройте схему данных следующим образом

 df = pd.DataFrame(list(zip(s1e1_y,s1e1_x))).set_index(1) df.plot.barh() 

Затем выполняется следующее

введите описание изображения здесь

Давайте будем гением компьютера.