Построение и маркировка каждого бина в гистограмме - PullRequest
0 голосов
/ 08 января 2020

У меня есть набор данных, который содержит категории (ярлыки) различных эмоций. Вы можете видеть, какие категории из переменной «метки», определенной в коде ниже. Каждая из этих категорий имеет различное количество данных, доступных в этом наборе данных, и я пытаюсь представить распределение набора данных по бинам гистограммы.

import matplotlib.pyplot as plt
import numpy as np
#labels inside emo variable, however they are labeled with numbers from 0 to 6 in sequence according to labels variable
labels = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise','neutral']
labels_np = np.array(labels)
#df_training is holding the train_set.csv, where I am selecting a single column which is 'emotion' 
emo = df_training["emotion"].hist()
plt.plot(labels_np,emo)

df_training ['emotion']:

df_training

Это то, что я получаю как ошибку:

**ValueError:** x and y must have same first dimension, but have shapes (7,) and (1,)

Это желаемый результат:

Histogram

1 Ответ

1 голос
/ 08 января 2020

Кажется, вы просто хотите нарисовать гистограмму и установить правильные метки. df_training.hist уже dr aws гистограмма, но с 0,1,2, ... в качестве x-меток. Вы можете изменить это, позвонив по номеру plt.xticks. Поскольку центр столбцов находится в позициях, 0,5,1,5,2,5, ... при установке отметок все выравнивается.

Поскольку ваши данные содержат только значения от 0 до 6, лучше всего 7 бинов, поэтому 8 границ, hist можно назвать bins=range(8). По умолчанию bins=10, что определенно не то, что вы хотите.

В приведенном ниже коде я удалил линии x-grid, так как они мешают и не очень нужны. Цвет края установлен ec='white', чтобы лучше различать guish баров. Столбец 'emotion' в df_training заполнен случайными данными.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

labels = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise','neutral']
df_training = pd.DataFrame( {'emotion': np.random.randint(0, 7, 100)})
emo = df_training.hist(column='emotion', ec='white', bins=range(8))
plt.grid(False, axis='x')
plt.xticks(ticks=np.arange(0.5,6.6,1), labels=labels)
plt.show()

Resulting plot

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