簡體   English   中英

seaborn 熱圖顏色 map

[英]seaborn heatmap color map

我有一個 dataframe df ,其值從 0 到 x(x 是 integer 並且沒有固定值),在我的示例中是 x=10

我想用 cmap 'Reds' map 熱圖,但是值 0 不應該是白色,而是綠色 '#009933'

import seaborn as sns # matplotlib inline 
import random
data = []
for i in range(10):
    data.append([random.randrange(0, 11, 1) for _ in range(10)])
df = pd.DataFrame(data)

fig, ax = plt.subplots(figsize = (12, 10)) 
# cmap = [????]
ax = sns.heatmap(df, cmap='Reds', linewidths = 0.005, annot = True, cbar=True) 
                            
plt.show()

在此處輸入圖像描述 我怎樣才能做到這一點?

作為已接受答案的替代方案,您還可以將vmin設置為略高於0並使用set_under定義超出范圍值的顏色:

import copy
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

cmap = copy.copy(plt.get_cmap("Reds"))
cmap.set_under('#009933')
sns.heatmap(np.random.randint(0,10,(10,10)), cmap=cmap, lw=0.005, annot=True, vmin=1e-5)

在此處輸入圖像描述

底色默認情況下不顯示under顏色欄中。 要更改顏色條,請使用例如sns.heatmap(..., cbar_kws={'extend':'min', 'extendrect':True}) 這些參數的解釋可以在colorbar docs中找到。

您可以使用LinearSegmentedColormap中的matplotlib.colors 您首先必須找到最大值,在本例中為 10,然后使用它創建一個以綠色開頭的 colors 變量,然后轉到標准的“紅色”顏色集。 另外,使用 seaborn 制作熱圖時將顏色欄設置為 False,並單獨使用 matplotlib 制作一張。

此代碼改編自此處

import matplotlib.pyplot as plt
import matplotlib.colors as cl
import seaborn as sns
import pandas as pd
import numpy as np
import random

data = []
for i in range(10):
    data.append([random.randrange(0, 11, 1) for _ in range(10)])
df = pd.DataFrame(data)

fig, ax = plt.subplots(figsize = (12, 10)) 
cmap_reds = plt.get_cmap('Reds')
num_colors = 11
colors = ['#009933'] + [cmap_reds(i / num_colors) for i in range(1, num_colors)]
cmap = cl.LinearSegmentedColormap.from_list('', colors, num_colors)
ax = sns.heatmap(df, cmap=cmap, vmin=0, vmax=num_colors, square=True, cbar=False, annot = True)
cbar = plt.colorbar(ax.collections[0], ticks=range(num_colors + 1))
cbar.set_ticks(np.linspace(0, num_colors, 2*num_colors+1)[1::2])
cbar.ax.set_yticklabels(range(num_colors))
plt.show()

這是 output: 在此處輸入圖像描述

暫無
暫無

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

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