簡體   English   中英

Matplotlib:cbar.set_xticklabels沒有影響

[英]Matplotlib: cbar.set_xticklabels has no effects

我已經將一年的365天分配給了幾個群集,現在我正嘗試將它們繪制在熱圖上。

我的代碼工作正常,除了cbar.set_ticks(some_range)不起作用:我的顏色欄上的刻度標簽具有正確的文本,但位置錯誤 yticks錯誤的顏色條

這是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))

謝謝你的幫助

解決方法是,以下內容在正確的位置添加了正確的標簽,

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

看起來像 在此處輸入圖片說明

編輯:或mfitzp的更一般的建議,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM