繁体   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