如何在任意范围内设置 seaborn 颜色图?
How to set a seaborn color map in an arbitrary range?
我正在为项目之间的相关性创建热图。
sns.heatmap(df_corr, fmt=".2g", cmap='vlag', cbar='True', annot = True)
我选择 vlag
是因为红色代表高值,蓝色代表低值,白色代表中间值。
Seaborn 自动将数据帧中的最高值设置为红色,将最低值设置为蓝色。
但是,由于我正在跟踪 Pearson 相关性,因此值范围在 -1 和 1 之间 - 因此我想将 1 设置为红色,-1 为蓝色,而 0 则为白色.
结果如何:
应该怎样*:
*(当然,这是通过“作弊”生成的 - 将 -1 设置为值以强制范围从 -1 到 1;我想设置此范围而不扭曲我的数据)
vmin=-1 和 vmax=1:
import numpy as np
import seaborn as sn
import matplotlib.pyplot as plt
data = np.random.uniform(low=-0.5, high=0.5, size=(5,5))
hm = sn.heatmap(data = data, cmap= 'vlag', annot = True, vmin=-1, vmax=1)
plt.show()
这是一个非正统的解决方案。您可以将数据“标准化”到范围 1 和 -1。尽管皮尔逊系数的理论范围是 [-1, 1];您的数据集中不存在强负相关。
因此,您可以创建另一个数据框,其中包含最大值为 1,最小值为 -1 的数据。然后您可以绘制此数据框以获得所需的效果。此过程提供的优势是该技术可以推广到几乎所有数据帧(尽管未验证)。
这是代码-
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# Setting the initial scale of the data
scale_minimum = -1
scale_maximum = 1
scale_range = scale_maximum-scale_minimum
# Applying the scaling
df_minimun, df_maximum = df.min(), df.max() # Getting the range of the current dataframe
df_range = df_maximum - df_minimun # The range of the data
df = (df - df_minimun)/(df_range) # Scaling between 0 and 1
df_scaled = df*(scale_range) + scale_minimum # Scaling between 1 and -1
希望这能解决您的问题。
我正在为项目之间的相关性创建热图。
sns.heatmap(df_corr, fmt=".2g", cmap='vlag', cbar='True', annot = True)
我选择 vlag
是因为红色代表高值,蓝色代表低值,白色代表中间值。
Seaborn 自动将数据帧中的最高值设置为红色,将最低值设置为蓝色。
但是,由于我正在跟踪 Pearson 相关性,因此值范围在 -1 和 1 之间 - 因此我想将 1 设置为红色,-1 为蓝色,而 0 则为白色.
结果如何:
应该怎样*:
*(当然,这是通过“作弊”生成的 - 将 -1 设置为值以强制范围从 -1 到 1;我想设置此范围而不扭曲我的数据)
vmin=-1 和 vmax=1:
import numpy as np
import seaborn as sn
import matplotlib.pyplot as plt
data = np.random.uniform(low=-0.5, high=0.5, size=(5,5))
hm = sn.heatmap(data = data, cmap= 'vlag', annot = True, vmin=-1, vmax=1)
plt.show()
这是一个非正统的解决方案。您可以将数据“标准化”到范围 1 和 -1。尽管皮尔逊系数的理论范围是 [-1, 1];您的数据集中不存在强负相关。
因此,您可以创建另一个数据框,其中包含最大值为 1,最小值为 -1 的数据。然后您可以绘制此数据框以获得所需的效果。此过程提供的优势是该技术可以推广到几乎所有数据帧(尽管未验证)。
这是代码-
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# Setting the initial scale of the data
scale_minimum = -1
scale_maximum = 1
scale_range = scale_maximum-scale_minimum
# Applying the scaling
df_minimun, df_maximum = df.min(), df.max() # Getting the range of the current dataframe
df_range = df_maximum - df_minimun # The range of the data
df = (df - df_minimun)/(df_range) # Scaling between 0 and 1
df_scaled = df*(scale_range) + scale_minimum # Scaling between 1 and -1
希望这能解决您的问题。