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