Тепловая карта или другой вариант с двумя переменными гистограммами? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть фрейм данных с двумя столбцами, в первом может быть целое число от 0 до 15, в другом может быть целое число от 0 до 10.

У df приблизительно 10000 строк.

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

Я пробовал и Сиборна, и Матплотлиба.

В Seaborn я попробовал jointplot, который почти сделал это, но я не могу заставить его показать реальную сетку 15x10. Я также попробовал heatmap, но он дал мне ошибку (см. Ниже), и я не смог ничего найти на нем.

Я также попытался построить какую-то трехмерную гистограмму.

Наконец, я попытался повернуть данные, но Pandas вычисляет числа как значения, а не обрабатывает их как «корзины».

Не уверен, куда идти отсюда.

*heatmap error: "ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''"
sns.heatmap(x='pressure_bucket', y='rate_bucket', data=df)

Наиболее близким к тому, что я хочу, является что-то вроде этого, в идеале с фактическими числами в каждой ячейке

https://imgur.com/a/d4qWIod

Спасибо всем заранее!

1 Ответ

0 голосов
/ 15 апреля 2019

Мы можем использовать plt.imshow для отображения тепловой карты,

# get the counts in form of a dataframe indexed by (c1,c2)
counts = df.groupby(['c1'])['c2'].value_counts().rename('value').reset_index()

# pivot to c1 as index, c2 as columns
counts = counts.pivot(index='c1', columns='c2', values='value')

# after reading your question carefully, there's another step
# fill all missing value in c1
counts.reindex(range(16))

# fill all missing value in c2
counts = counts.reindex(range(10), axis=1)

# fill all missing values with 0
counts = counts.fillna(0)

# imshow
plt.figure(figsize=(15,10))
plt.imshow(counts, cmap='hot')
plt.grid(False)
plt.show()

# sns would give a color bar legend
plt.figure(figsize=(15,10))
sns.heatmap(counts, cmap='hot')
plt.show()

Вывод (случайные записи)

enter image description here

Вывод sns:

enter image description here

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