fracasos
Al trazar mapas de calor con seaborn (y matrices de correlación con matplotlib), la primera y la última fila se cortan por la mitad. Esto también sucede cuando ejecuto este ejemplo de código mínimo que encontré en línea.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv('https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv')
plt.figure(figsize=(10,5))
sns.heatmap(data.corr())
plt.show()
Las etiquetas en el eje y están en el lugar correcto, pero las filas no están completamente allí.
Hace unos días, funciona según lo previsto. Desde entonces, instalé texlive-xetex, así que lo eliminé nuevamente, pero no resolvió mi problema.
¿Alguna idea de lo que me podría estar perdiendo?
La Importancia De SerErnest
Desafortunadamente matplotlib 3.1.1 rompieron los mapas de calor nacidos en el mar; y en general ejes invertidos con ticks fijos.
Esto está solucionado en la versión de desarrollo actual; usted puede por lo tanto
- volver a matplotlib 3.1.0
- use matplotlib 3.1.2 o superior
- establecer los límites del mapa de calor manualmente (
ax.set_ylim(bottom, top) # set the ylim to bottom, top
)
-
He visto esta pregunta, pero no estoy familiarizado con cómo volver a matplotlib 3.1.0 o establecer los límites del mapa de calor manualmente (lo intenté pero aún está truncado) y no puedo esperar a 3.1.2. ¿Cómo podría volver a matplotlib 3.1.0?
– Soz Daneron
6 de agosto de 2019 a las 15:17
-
Depende de cómo haya instalado matplotlib. Por ejemplo, a través de pip ver esto.
– La Importancia De Ser Ernesto
6 de agosto de 2019 a las 15:20
-
Correcto, todavía soy nuevo en PyCharm. Lo descubrí ahora, gracias.
– Soz Daneron
6 de agosto de 2019 a las 15:24
-
@ talha06 No, me refiero a los límites de la trama. Si
ax = sns.heatmap(...)
colocarax.set_ylim(...)
a lo que necesites que sean tus límites.– La Importancia De Ser Ernesto
15 de agosto de 2019 a las 2:09
-
Para 7 niveles tuve que usar
ax.set_ylim(0 ,7)
. Usando solo ax.set_ylim(7) dejó una fila a la mitad.–Dzamo Norton
16 de octubre de 2019 a las 3:29
Nikhil Pakki
Es un error en la regresión de matplotlib entre 3.1.0 y 3.1.1. Puede corregir esto de la siguiente manera:
import seaborn as sns
df_corr = someDataFrame.corr()
ax = sns.heatmap(df_corr, annot=True) #notation: "annot" not "annote"
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
-
Esto, por ejemplo, no me funcionó. Pero para ser justos, mi problema era diferente en el sentido de que faltaba una fila completa del mapa de calor. Para mí, revertir la versión, como mencioné en un comentario anterior, era la única salida.
– Sidak
4 de noviembre de 2019 a las 14:36
-
Funciona, aunque parezca ilógico. Porque deberia
bottom
ser más grande quetop
?–Eric Duminil
19 de enero de 2020 a las 14:18
-
Trabajó para mi. plt.figure(figsize=(5,3)) ax = sn.heatmap(cm, annot=True, fmt=”) bottom, top = ax.get_ylim() ax.set_ylim(bottom + 0.5, top – 0.5) plt.xlabel(‘Predicción’) plt.ylabel(‘Verdad’) plt.title(‘Matriz de confusión’)
– MPJ567
7 febrero 2020 a las 20:32
lbarbus
Se corrigió usando lo anterior y configurando los límites del mapa de calor manualmente.
Primero
ax = sns.heatmap(...
comprobó los ejes actuales con
ax.get_ylim()
(5.5, 0.5)
arreglado con
ax.set_ylim(6.0, 0)
Lo resolví agregando esta línea en mi código, con matplotlib==3.1.1
:
ax.set_ylim(sorted(ax.get_xlim(), reverse=True))
NÓTESE BIEN. La única razón por la que esto funciona es porque el eje x no cambia, así que utilícelo bajo su propio riesgo con futuras versiones de mpl
matplotlib 3.1.2 está disponible: está disponible en la nube de Anaconda a través de conda-forge, pero no pude instalarlo a través de conda install. La alternativa manual funcionó: descargue matplotlib 3.1.2 de github e instálelo a través de pip
% curl https://codeload.github.com/matplotlib/matplotlib/tar.gz/v3.1.2 --output matplotlib-3.1.2.tar.gz
% pip install matplotlib-3.1.2.tar.gz
-
No puedo actualizar el paquete. Recibí este error:
ERROR: Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'c:\\users\\w-book\\anaconda3\\lib\\site-packages\\matplotlib\\backends\\_backend_agg.cp37-win_amd64.pyd' Consider using the --user option or check the permissions.
– Jade Cacho
17 de diciembre de 2019 a las 8:21
-
Lo anterior se probó en MacOS. No estoy familiarizado con el escenario de Windows, pero parece que es un problema de permisos locales.
– rustyDev
18 de diciembre de 2019 a las 15:21
-
Gracias por la respuesta. Terminé instalando la versión anterior (matplotlib-3.1.0).
– Jade Cacho
19 de diciembre de 2019 a las 4:25
Super Mario
Trabajó para mi:
b, t = plt.ylim()
b += 0.5
t -= 0.5
custom_ylim = (b, t)
plt.setp(axes, ylim=custom_ylim)
-
No puedo actualizar el paquete. Recibí este error:
ERROR: Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'c:\\users\\w-book\\anaconda3\\lib\\site-packages\\matplotlib\\backends\\_backend_agg.cp37-win_amd64.pyd' Consider using the --user option or check the permissions.
– Jade Cacho
17 de diciembre de 2019 a las 8:21
-
Lo anterior se probó en MacOS. No estoy familiarizado con el escenario de Windows, pero parece que es un problema de permisos locales.
– rustyDev
18 de diciembre de 2019 a las 15:21
-
Gracias por la respuesta. Terminé instalando la versión anterior (matplotlib-3.1.0).
– Jade Cacho
19 de diciembre de 2019 a las 4:25
AAKANKSHA DUGGAL
Rebaja tu matplotlib
!pip install matplotlib==3.1.0
y agregue esta línea a su código de trama:
ax[i].set_ylim(sorted(ax[i].get_xlim(), reverse=True))