2016-04-06 18 views
2

Bir yılın 365 gününü birkaç kümeye atadım ve şimdi bunları bir ısı eşlemesinde çizmeye çalışıyorum.Matplotlib: cbar.set_xticklabels efekt içermiyor

Kodum cbar.set_ticks (some_range) dışında çalışıyor hiçbir etkileri vardır: im etiketleri benim Colorbar sağ metin ama yanlış pozisyon İşte a colorbar with wrong yticks

bir MCVE

from datetime import date 
import numpy as np 
import pandas as pd 
import matplotlib.pylab as plt 
import matplotlib 
import seaborn as sns 

#create some random data 
n_cluster = 4 
index = pd.date_range('01/01/2016', end='31/12/2016', freq='1D') 
df = pd.DataFrame(np.random.randint(0, n_cluster, len(index)), 
      index=index, columns=['cluster']) 

pivot = df.pivot_table('cluster', 
    columns=[lambda x: x.weekofyear], 
    index= [lambda x: x.dayofweek]) 

#yticklabels of the heatmap 
days = [date(2018, 1, d).strftime('%a')[:3] for d in range(1, 8)] 

#get a discrete cmap 
cmap = plt.cm.get_cmap('RdBu', n_cluster) 

fig = plt.figure(figsize=(10,3)) 
gs = matplotlib.gridspec.GridSpec(1, 2, width_ratios=[50,1]) 
ax = plt.subplot(gs[0]) 
cbar = plt.subplot(gs[1]) 
sns.heatmap(pivot, square=True, cmap=cmap, 
      yticklabels=days, ax=ax, cbar_ax=cbar) 

#There is something wrong here 
cbar.set_yticks([i + 1/(2.0*n_cluster) for i in np.arange(0, 1, 1.0/n_cluster)]) 

#This one is ok 
cbar.set_yticklabels(range(0, n_cluster)) 

olduğunu var Yardımlarınız çözüm olarak

+0

Nerede im etiketleri olmak istiyorsun? – kazemakase

+0

Koyu mavi yamanın ortasındaki "3" gibi renkli yamalar ile hizalanmasını istiyorum. Sırasıyla renk çubuğunun toplam yüksekliğinin [0.125, 0.375, 0.625, 0.875] 'de. – jodoox

+1

Bir şekilde deniz kuşağı kene pozisyonlarını zorlar gibi görünüyor. Gelecekte belki de 'cbar_kws' argümanında colorbar kenelerini ayarlamak mümkün olacaktır, ancak bu şu anda '' ticks '' için kırılmıştır (https://github.com/mwaskom/seaborn/ sorunların/459)). – kazemakase

cevap

3

için teşekkürler, şu, doğru yerde doğru etiketleri ekler

cbar.yaxis.set_ticks([0.125, 0.375, 0.625, 0.875]) 
benziyor

, enter image description here

DÜZENLEME: Veya mfitzp daha genel öneri,

cbar.yaxis.set_ticks([i + 1/(2.0*n_cluster) 
         for i in np.arange(0, 1, 1.0/n_cluster)]) 
+2

Tam bir cevap vermek için nc.arange (0, 1, 1.0/n_cluster)] 'da cbar.yaxis.set_ticks ([i + 1/(2.0 * n_cluster)] işlevini kullanabilirsiniz. – mfitzp

+0

Mükemmel! Teşekkürler – jodoox