更大的对数色标 Python sns.clustermap()
Bigger logarithmic color scale Python sns.clustermap()
我的大多数旋转值都在 0.96 和 1 之间……比如
0.960186
0.960139
0.960129
等等..我希望它们是可区分的..但是因为我的一些值比10大得多,所以我做了一个双对数色标..但这没有帮助。有人有想法吗?
我做到了
p = sns.clustermap(pivotted, norm=SymLogNorm(linthresh=0.000000001, vmin=pivotted.min().min(), vmax=pivotted.max().max()))
您可以试试下面的方法,技巧是将边界设置为较低的值:
import seaborn as sns
import numpy as np
from matplotlib.colors import LogNorm
from matplotlib.colors import LinearSegmentedColormap
boundaries = [0.0, 0.03, 0.06, 0.09, 0.12,1.0]
hex_colors = sns.color_palette("coolwarm", n_colors=len(boundaries) * 2 + 2).as_hex()
hex_colors = [hex_colors[i] for i in range(0, len(hex_colors), 2)]
colors=list(zip(boundaries, hex_colors))
custom_color_map = LinearSegmentedColormap.from_list(
name="cus",
colors=colors,
)
你也可以定义一个颜色列表,只要是分界线。所以下面我尝试像你一样模拟数据,不知道它有多接近:
np.random.seed(111)
df = np.random.uniform(low=0.8,high=1,size=(8,8))
df[np.random.randint(0,7,6),np.random.randint(0,7,6)] = 10,9,10,9,10,9
sns.clustermap(df,norm=LogNorm(),cmap=custom_color_map)
我的大多数旋转值都在 0.96 和 1 之间……比如 0.960186 0.960139 0.960129 等等..我希望它们是可区分的..但是因为我的一些值比10大得多,所以我做了一个双对数色标..但这没有帮助。有人有想法吗?
我做到了
p = sns.clustermap(pivotted, norm=SymLogNorm(linthresh=0.000000001, vmin=pivotted.min().min(), vmax=pivotted.max().max()))
您可以试试下面的方法,技巧是将边界设置为较低的值:
import seaborn as sns
import numpy as np
from matplotlib.colors import LogNorm
from matplotlib.colors import LinearSegmentedColormap
boundaries = [0.0, 0.03, 0.06, 0.09, 0.12,1.0]
hex_colors = sns.color_palette("coolwarm", n_colors=len(boundaries) * 2 + 2).as_hex()
hex_colors = [hex_colors[i] for i in range(0, len(hex_colors), 2)]
colors=list(zip(boundaries, hex_colors))
custom_color_map = LinearSegmentedColormap.from_list(
name="cus",
colors=colors,
)
你也可以定义一个颜色列表,只要是分界线。所以下面我尝试像你一样模拟数据,不知道它有多接近:
np.random.seed(111)
df = np.random.uniform(low=0.8,high=1,size=(8,8))
df[np.random.randint(0,7,6),np.random.randint(0,7,6)] = 10,9,10,9,10,9
sns.clustermap(df,norm=LogNorm(),cmap=custom_color_map)