2016-04-27 16 views
6

Bir deniz kıyısı ısı haritası grafiğinde oturum açmak için renk çubuğu ölçeğini ayarlamanın bir yolu var mı?
BenLogaritmik-ölçekli colorbar ile Seaborn Heatmap

sns.heatmap(df_pivot_mirror,annot=False,xticklabels=256,yticklabels=128,cmap=plt.cm.YlOrRd_r) 

teşekkür ederiz çağrısına girdi olarak pandalar bir özet tablo çıktı kullanıyorum.

cevap

8

Evet, ama Seaborn kodlanmış Colorbar için doğrusal kene bulucu vardır, bu nedenle sonuç istediğiniz oldukça olmayabilir neyi:

# http://matplotlib.org/examples/pylab_examples/pcolor_log.html 
# modified to use seaborn 

import matplotlib.pyplot as plt 
from matplotlib.colors import LogNorm 
import numpy as np 
from matplotlib.mlab import bivariate_normal 
import seaborn as sns; sns.set() 


N = 20 
X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)] 

# A low hump with a spike coming out of the top right. 
# Needs to have z/colour axis on a log scale so we see both hump and spike. 
# linear scale only shows the spike. 
Z1 = bivariate_normal(X, Y, 0.1, 0.2, 1.0, 1.0) + 0.1 * bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 

fig, axs = plt.subplots(ncols=2) 

sns.heatmap(Z1, ax = axs[0]) 
sns.heatmap(Z1, ax = axs[1], 
      #cbar_kws={'ticks':[2,3]}, #Can't specify because seaborn does 
      norm=LogNorm(vmin=Z1.min(), vmax=Z1.max())) 


axs[0].set_title('Linear norm colorbar, seaborn') 
axs[1].set_title('Log norm colorbar, seaborn') 
plt.show() 

bu PyLab versiyonu için başlayan PyLab örneğe bakın o otomatik olarak colorbar onaylama etiketlerini alır (aksi halde güzel değil).

spiky data with linear and log colorbar

Bunu çalışması için Seaborn kodunu düzenleyebilirsiniz: Eğer (0.7.0 sürümü) /seaborn/matrix.py içinde plot() işlevini değiştirebilir eğer:

# Possibly add a colorbar 
    if self.cbar: 
     ticker = mpl.ticker.MaxNLocator(6) 
     if 'norm' in kws.keys(): 
      if type(kws['norm']) is mpl.colors.LogNorm: 
       ticker = mpl.ticker.LogLocator(numticks=8) 

elde edersiniz:

enter image description here

Ben Seaborn github önerilerde bulunuruz, ama daha önce istersen, işte orada.

+1

Seaborn sorunu https://github.com/mwaskom/seaborn/issues/459 ayrıca düzeltilebilir (farklı bir yol) yapar – cphlewis

+0

Tek şey, eğer değerlerin bazıları olumsuz ise, o zaman bu bir problemdir. Hiperbolik ters sin (arcsinh) negatif ve 0 değerleri için daha iyi çalışır. – wordsforthewise

+0

Matplotlib'e yerleşik bir arcsinh yok, ancak SymLogNorm'u negatif değerler için kullanabilirsiniz. 0 olsa bile olsa emin değil. https://matplotlib.org/devdocs/tutorials/colors/colormapnorms.html#sphx-glr-tutorials-colors-colormapnorms-py – wordsforthewise

1

Cphlewis'e yanıt vermek (Yeterli saygınlığım yok), bu sorunu cbar_kws kullanarak çözdüm; Burada gördüğüm gibi: seaborn clustermap: set colorbar ticks.

Örneğin cbar_kws={"ticks":[0,1,10,1e2,1e3,1e4,1e5]}.

s=np.random.rand(20,20) 
sns.heatmap(s, norm=LogNorm(s.min(),s.max()), 
      cbar_kws={"ticks":[0,1,10,1e2,1e3,1e4,1e5]}, 
      vmin = 0.001, vmax=10000) 
plt.show() 

İyi günler.