Matplotlib неправильно сортирует гистограмму - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь получить гистограмму с помощью Matplotlib в Python 3.6, и хотя я получил диаграмму, она не сортируется в возрастающем порядке.

Код сможет создать список из Столбец CSV-файла, подсчитайте вхождения в этом списке и верните словарь (тип вхождений: номер вхождения) и распечатайте его на графике гистограммы. Я не могу понять, почему столбцы не упорядочены, и примеры, которые я видел по этому типу проблемы, отличаются от моей ситуации.

Файл не здесь, но результаты печати (Di c) заказано: Счетчик ({'Walk': 191, 'Sitt': 87, 'CarChild': 28, 'SittCell': 26, 'WalkCell': 23, 'SittTalk': 21, 'Play': 17, 'Shoot' : 16, «PhyExer»: 12, «Jogging»: 9, «PlayFeedF»: 7, «ShootSelf»: ​​6, «Stand»: 4, «PushPram»: 3, «OnPram»: 3, «ShootCam»: 2 , 'Portrait': 2, 'Pose': 2, 'PlayFeedB': 2, 'PlayScoot': 2, 'ACTION': 1, 'Sing': 1, 'SittLap': 1, 'SittMag': 1, ' SittBook ': 1,' WalkChild ': 1,' WalkPar ': 1,' PlayInst ': 1,' PlayFeed ': 1,' WalkScoot ': 1,' PlayInstCell ': 1})

Здесь следует код:

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


# this block will create a list from a csv column
lista = []

with open('xujiahui.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for lines in csv_reader:
    lista.append(lines[1])

#print(lista)

# this block will count each item and return a key: value pair dic:
Dic = Counter(lista)
print(Dic)


# this block plots bar chart
uses = list(Dic.keys())
use_num = list(Dic.values())

plt.xlabel('Occurrences')
plt.title('User types and occurrences')

plt.barh(range(len(use_num)), use_num, color='black', tick_label=uses)

plt.show()

Ниже приводится сюжет:

enter image description here

1 Ответ

0 голосов
/ 12 марта 2020

Я просто обнаружил, что ключи и значения в обоих списках расположены не в том же порядке, что и словарь, поэтому панель не сортируется. Поэтому я решил использовать другой способ построения обоих списков из словаря через al oop, и теперь matplotlib выводит корректно. Вот код и окончательный сюжет:

import matplotlib.pyplot as plt; plt.rcdefaults()
import matplotlib.pyplot as plt
import csv
import collections
import numpy as np
from collections import Counter


# # this block will create a list from a csv column
lista = []
#Count = {}

with open('xujiahui.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for lines in csv_reader:
        lista.append(lines[1])
#print(lista)

# this block will count each item and return a key: value pair dic:
Dic = Counter(lista)
print(Dic)

mydict = {'walk': 191, 'sitt': 87, 'carchild': 28, 'sittcell': 26, 'walkcell': 23, 'sitttalk': 21, 'play': 17, 'shoot': 16, 'phyexer': 12, 'jogging': 9, 'playfeedf': 7, 'shootself': 6, 'stand': 4, 'pushpram': 3, 'onpram': 3, 'shootcam': 2, 'portrait': 2, 'pose': 2, 'playfeedb': 2, 'playscoot': 2, 'sing': 1, 'sittlap': 1, 'sittmag': 1, 'sittbook': 1, 'walkchild': 1, 'walkpar': 1, 'playinst': 1, 'playfeed': 1, 'walkscoot': 1, 'playinstcell': 1}

# this block generate lists from mydict
use = []
use_num = []
print ('Sort by keys:')
for key in mydict.keys():
    use.append(key)
print(use)

print ('Sort by items:')
for value in mydict.values():
    use_num.append(value)
print(use_num)

# this block will plot
plt.xlabel('Occurences')
plt.title('User types and occurrences')

plt.barh(range(len(use_num)), use_num, color='black', tick_label=use)

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...