matplotlib / seaborn: ısı haritasının yarısında ilk ve son satır kesildi


108

Seaborn ile ısı haritalarını (ve matplotlib ile korelasyon matrislerini) çizerken, ilk ve son satır ikiye bölünür. Bu, çevrimiçi bulduğum bu minimum kod örneğini çalıştırdığımda da oluyor.

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()

Ve bu sonucu alın (henüz resimleri gömmeme iznim yok) Y eksenindeki etiketler doğru yerdedir, ancak satırlar tamamen orada değildir.

Birkaç gün önce amaçlandığı gibi çalışıyor. O zamandan beri texlive-xetex'i kurdum ve bu yüzden tekrar kaldırdım ama sorunumu çözmedi.

Neyi kaçırabileceğime dair bir fikrin var mı?


1
Gerçek verileri sağlayabilir misiniz? Yeterince küçük görünüyor
Mad Physicist

1
Genel olarak piksel sınırlarımız -0,5 ile boyut + 0,5 arasındadır. Görünüşe göre yatay eksen sınırları doğru ayarlanmış, ancak dikey değil. Ylim ile herhangi bir yerde uğraşıyor musun?
Mad Physicist

Yanıtlar:


98

Maalesef matplotlib 3.1.1 deniz korusu ısı haritalarını bozdu ; ve genel olarak sabit keneli ters çevrilmiş eksenler.
Bu, mevcut geliştirme sürümünde düzeltilmiştir; bu yüzden olabilirsin

  • matplotlib 3.1.0'a dön
  • matplotlib 3.1.2 veya üstünü kullanın
  • ısı haritası sınırlarını manuel olarak ayarlayın ( ax.set_ylim(bottom, top) # set the ylim to bottom, top)

Bu soruyu etrafta gördüm, ancak matplotlib 3.1.0'a nasıl geri dönüleceğini veya ısı haritası sınırlarını manuel olarak nasıl ayarlayacağımı (bunu denedim ama yine de kesildi) ve 3.1.2'yi bekleyemiyorum. Matplotlib 3.1.0'a nasıl geri dönebilirim?
SozDaneron

Matplotlib'i nasıl kurduğunuza bağlıdır. Örneğin aracılığıyla pip bakın bu .
ImportanceOfBeingErnest

Doğru, PyCharm'da hala yeniyim. Şimdi anladım, teşekkürler.
SozDaneron

1
@ talha06 Hayır arsa sınırlarını kastediyorum. Eğer ax = sns.heatmap(...)seti, ax.set_ylim(...)sen olmak için sınırlarını ihtiyaç duyduğunuz kadar.
ImportanceOfBeingErnest

2
7 seviye için kullanmak zorunda kaldım ax.set_ylim(0 ,7). Sadece ax.set_ylim (7) kullanarak bir satır yarıya indirildi.
Dzamo Norton

83

3.1.0 ile 3.1.1 arasındaki matplotlib regresyonunda bir hata Bunu şu şekilde düzeltebilirsiniz:

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)

Mesela bu bende işe yaramadı. Ancak dürüst olmak gerekirse, benim sorunum farklıydı, çünkü ısı haritasının bir satırı eksikti. Benim için, yukarıdaki bir yorumda bahsettiğim gibi sürümü geri almak, tek çıkış yoluydu.
Sidak

Mantıksız görünse de işe yarıyor. Neden bottomdaha büyük olmalı top?
Eric Duminil

Benim için çalıştı. plt.figure (figsize = (5,3)) ax = sn.heatmap (cm, annot = True, fmt = '') alt, üst = ax.get_ylim () ax.set_ylim (alt + 0.5, üst - 0.5) plt.xlabel ('Tahmin') plt.ylabel ('Truth') plt.title ('Confusion Matrix')
MPJ567

18

Yukarıdakilerin kullanılması ve ısı haritası sınırlarının manuel olarak ayarlanması düzeltildi.

İlk

ax = sns.heatmap(...

ile mevcut eksenleri kontrol etti

ax.get_ylim()
(5.5, 0.5)

İle düzeltildi

ax.set_ylim(6.0, 0)

5

Koduma bu satırı ekleyerek çözdüm matplotlib==3.1.1:

ax.set_ylim(sorted(ax.get_xlim(), reverse=True))

NB. Bunun çalışmasının tek nedeni, x ekseninin değişmemesidir, bu nedenle gelecekteki mpl sürümlerinde kendi sorumluluğunuzdadır kullanın


3

matplotlib 3.1.2 çıktı - Conda-forge aracılığıyla Anaconda bulutunda mevcut, ancak bunu conda kurulumuyla yükleyemedim. Manuel alternatif işe yaradı: Github'dan matplotlib 3.1.2'yi indirin ve pip ile kurun

 % 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

Paketi güncelleyemiyorum. Bu hatayı aldım: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

Yukarıdakiler MacOS'ta denendi. Windows senaryosuna aşina değil ama yerel bir izin sorunu gibi görünüyor.
rustyDev

Cevap için teşekkürler. Eski sürümü (matplotlib-3.1.0) yükledim.
Jade Cacho


0

rustyDev conda-forge konusunda haklı, ancak bir github indirmesinden manuel pip kurulumu yapmam gerekmedi. Benim için Windows'ta doğrudan çalıştı. Ve araziler yine güzel.

https://anaconda.org/conda-forge/matplotlib

conda install -c conda-forge matplotlib

cevap için gerekli olmayan isteğe bağlı noktalar:

Daha sonra, diğer adımları denedim, ancak gerekli değil: conda komutunda: conda search matplotlib --info yeni sürüm bilgisi göstermedi, en son bilgi 3.1.1 içindi. Bu yüzden pip kullanarak denedim pip install matplotlib==3.1.2Ama pip "Gereksinim zaten karşılandı" diyor

Ardından sürümü medium.com/@rakshithvasudev/… adresine göre almak 3.1.2'nin python - import matplotlib - matplotlib.__version__başarıyla yüklendiğini gösterir

Btw, Spyder'ı v4.0.0'a güncelledikten hemen sonra bu hatayı aldım. Hata, bir karışıklık matrisinin grafiğindeydi. Bundan birkaç ay önce bahsedilmişti. Bu seaborn sorusu ile zaten bağlantılı olan stackoverflow.com/questions/57225685/….


-1

conda matplotlib = 3.1.0 yüklemek

Bu benim için çalıştı ve matplotlib'i 3.1.1'den 3.1.0'a düşürdü ve ısı haritaları doğru davranmaya başladı


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.