Как я могу повернуть аннотированные данные и легенду тепловой карты морского происхождения? - PullRequest
0 голосов
/ 26 апреля 2020

Я создал тепловую карту морского дна, чтобы суммировать коэффициенты Teils_U. Данные отображаются горизонтально в тепловой карте. Теперь я хотел бы повернуть данные и легенду. Я знаю, что вы можете повернуть метки оси x и оси y на графике, но как я могу повернуть данные и легенду?

Это мой код:

#creates padnas dataframe to hold the values
theilu = pd.DataFrame(index=['Y'],columns=matrix.columns)
#store column names in variable columns
columns = matrix.columns

#iterate through each variable
for j in range(0,len(columns)):
    #call teil_u function on "ziped" independant and dependant variable -> respectivley x & y in the functions section
    u = theil_u(matrix['Y'].tolist(),matrix[columns[j]].tolist())
    #select respecive columns needed for output
    theilu.loc[:,columns[j]] = u
    #handle nans if any  
    theilu.fillna(value=np.nan,inplace=True)

 #plot correlation between fraud reported (y) and all other variables (x)
 plt.figure(figsize=(20,1))
 sns.heatmap(theilu,annot=True,fmt='.2f')
 plt.show()

Здесь Изображение того, что я ищу:

enter image description here

Пожалуйста, дайте мне знать, если вам нужны образцы данных или функция teil_u для воссоздания проблемы. Спасибо

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Параметры аннотации можно изменить с помощью annot_kws. Одним из них является вращение.

Некоторые параметры цветовой панели можно изменить с помощью cbar_kwsdict, но, к сожалению, ориентация меток не входит в их число. Поэтому вам нужна ручка для топора цветовой шкалы. Один из способов - заранее создать топор и передать его sns.heatmap(..., cbar_ax=ax). Более простой способ - получить дескриптор впоследствии: cbar = heatmap.collections[0].colorbar.

С помощью этого дескриптора ax вы можете изменить другие свойства цветовой панели, например ориентацию ее меток. Кроме того, их вертикальное выравнивание может быть изменено для центрирования.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

data = np.random.rand(1, 12)
fig, ax = plt.subplots(figsize=(10,2))
heatmap = sns.heatmap(data, cbar=True, ax=ax,
                      annot=True, fmt='.2f', annot_kws={'rotation': 90})
cbar = heatmap.collections[0].colorbar
# heatmap.set_yticklabels(heatmap.get_yticklabels(), rotation=90)
heatmap.set_xticklabels(heatmap.get_xticklabels(), rotation=90)
cbar.ax.set_yticklabels(cbar.ax.get_yticklabels(), rotation=90, va='center')
plt.tight_layout()
plt.show()

example plot

1 голос
/ 26 апреля 2020

Вы можете передать аргумент ax.text() (который используется для записи аннотации), используя аргумент annot_kws= .

Следовательно:

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
fig, ax = plt.subplots(figsize=(8,8))
ax = sns.heatmap(flights, annot=True, fmt='d', annot_kws={'rotation':90})

enter image description here

...