Cum pot roti axa tickmark etichete dacă am stabilit axa proprietăți înainte de a face planul meu?

0

Problema

Am experimentat cu seaborn și au o întrebare despre specificarea axelor proprietăți. În codul de mai jos, mi-am luat două abordări pentru crearea unui heatmap dintre o matrice și plasarea rezultatelor pe două seturi de axe ca în figura.

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

A=np.random.randn(4,4)
labels=['a','b','c','d']

fig, ax = plt.subplots(2)

sns.heatmap(ax =ax[0], data = A)
ax[0].set_xticks(range(len(labels)))
ax[0].set_xticklabels(labels,fontsize=10,rotation=45)
ax[0].set_yticks(range(len(labels)))
ax[0].set_yticklabels(labels,fontsize=10,rotation=45)


ax[1].set_xticks(range(len(labels)))
ax[1].set_xticklabels(labels,fontsize=10,rotation=45)
ax[1].set_yticks(range(len(labels)))
ax[1].set_yticklabels(labels,fontsize=10,rotation=45)
sns.heatmap(ax =ax[1], data = A,xticklabels=labels, yticklabels=labels)
plt.show() 

Cifra rezultată se pare ca acest lucru:

enter image description here

În mod normal, aș lua mereu prima abordare de creare a heatmap și apoi specificarea axei proprietăți. Cu toate acestea, atunci când se creează o animație (pentru a fi încorporate pe o tkinter panza), care este ceea ce eu sunt în cele din urmă, interesat în a face, am găsit astfel o ordonare în funcție de actualizare duce să "pâlpâie" de etichetele axei. Cea de-a doua abordare va elimina acest efect, și, de asemenea, centre de marcajele în pătrate de-a lungul axelor.

Cu toate acestea, cea de-a doua abordare nu a roti axa y tickmark etichetele dorite. Există o soluție simplă pentru acest lucru?

matplotlib python
2021-11-23 23:04:06
1

Cel mai bun răspuns

1

Nu sunt sigur că asta este ceea ce căutați pentru. Se pare ca ai crea figure după ce ai schimba yticklabels. deci figure este suprascrierea ta yticklabels.

Mai jos va rezolva problema.

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

A=np.random.randn(4,4)
labels=['a','b','c','d']

fig, ax = plt.subplots(2)

sns.heatmap(ax =ax[0], data = A)
ax[0].set_xticks(range(len(labels)))
ax[0].set_xticklabels(labels,fontsize=10,rotation=45)
ax[0].set_yticks(range(len(labels)))
ax[0].set_yticklabels(labels,fontsize=10,rotation=45)


ax[1].set_xticks(range(len(labels)))
ax[1].set_xticklabels(labels,fontsize=10,rotation=45)
ax[1].set_yticks(range(len(labels)))
sns.heatmap(ax =ax[1], data = A,xticklabels=labels, yticklabels=labels)
ax[1].set_yticklabels(labels,fontsize=10,rotation=45)

plt.show() 

enter image description here

2021-11-24 03:33:46

Aceasta funcționează bine pentru o singură parcelă, dar nu se referă la "pâlpâie" problemă atunci când nu-l includă într-o funcție de actualizare utilizate într-o animație. Se pare că numai prin stabilirea axei de proprietăți înainte de a apela sns.heatmap pot elimina pâlpâirea. Am încercat, de asemenea, setarea xlabels, ylabels=Fals în sns.heatmap și apoi setarea axei proprietăți după aceea, dar asta nu rezolva problema. Probabil că ar fi trebuit incluse animație cod, precum și în postul meu original. Ar trebui să creez un post nou, inclusiv animație cod sau edita cele de mai sus? Îmi cer scuze pentru că nu am fost mai clar.
fishbacp

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................