matplotlib-seaborn-相关图上的数字不可读
下图显示了一列的相关性。问题是数字不可读,因为其中有许多列 怎么可能只显示5或6个最重要的列,而不是所有列的重要性都很低matplotlib-seaborn-相关图上的数字不可读,matplotlib,seaborn,Matplotlib,Seaborn,下图显示了一列的相关性。问题是数字不可读,因为其中有许多列 怎么可能只显示5或6个最重要的列,而不是所有列的重要性都很低 plt.figure(figsize=(20,3)) sns.heatmap(df.corr()[['price']].sort_values('price', ascending=False).iloc[1:].T, annot=True, cmap='Spectral_r', vmax=0.9, vmin=-0.31)
plt.figure(figsize=(20,3))
sns.heatmap(df.corr()[['price']].sort_values('price', ascending=False).iloc[1:].T, annot=True,
cmap='Spectral_r', vmax=0.9, vmin=-0.31)
注释也可以是标签列表。使用此选项,可以定义用于显示所需数字的字符串矩阵,并将其他数字设置为空字符串
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set_theme()
import pandas as pd
from string import ascii_letters
# generate random data
rs = np.random.RandomState(33)
df = pd.DataFrame(data=rs.normal(size=(100, 26)),
columns=list(ascii_letters[26:]))
importance_index = 5 # until which idx to hide values
data = df.corr()[['A']].sort_values('A', ascending=False).iloc[1:].T
labels = data.astype(str) # make a str-copy
labels.iloc[0,:importance_index] = ' ' # mask columns that you want to hide
sns.heatmap(data, annot=labels, cmap='Spectral_r', vmax=0.9, vmin=-0.31, fmt='', annot_kws={'rotation':90})
plt.show()
某些随机数据的输出:
这是可行的,但也有其局限性,特别是设置fmt=''
(不能再使用它方便地格式化小数,现在需要手动执行)。我也会质疑你的方法是否是这里最好的方法。我认为情节的连贯性很重要。我宁愿评估我们是否不能旋转热图标签(我在上面已经包括了它),或者完全忽略它们,因为它在技术上是多余的,因为颜色编码。或者,您只能使用“重要”值打印单元格。annot
也可以是标签列表。使用此选项,可以定义用于显示所需数字的字符串矩阵,并将其他数字设置为空字符串
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set_theme()
import pandas as pd
from string import ascii_letters
# generate random data
rs = np.random.RandomState(33)
df = pd.DataFrame(data=rs.normal(size=(100, 26)),
columns=list(ascii_letters[26:]))
importance_index = 5 # until which idx to hide values
data = df.corr()[['A']].sort_values('A', ascending=False).iloc[1:].T
labels = data.astype(str) # make a str-copy
labels.iloc[0,:importance_index] = ' ' # mask columns that you want to hide
sns.heatmap(data, annot=labels, cmap='Spectral_r', vmax=0.9, vmin=-0.31, fmt='', annot_kws={'rotation':90})
plt.show()
某些随机数据的输出:
这是可行的,但也有其局限性,特别是设置fmt=''
(不能再使用它方便地格式化小数,现在需要手动执行)。我也会质疑你的方法是否是这里最好的方法。我认为情节的连贯性很重要。我宁愿评估我们是否不能旋转热图标签(我在上面已经包括了它),或者完全忽略它们,因为它在技术上是多余的,因为颜色编码。或者,您只能使用“重要”值绘制单元格。您可以通过.iloc[1:7]
限制显示的单元格。如果还希望显示最大负值,可以使用.iloc[-6:://code>创建第二个绘图。要将两者结合在一起,您可以使用numpy的切片函数并编写.iloc[np.r\1:4,-3:0]
将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
df=pd.DataFrame(np.random.rand(7,27),列=['price']+[*'abcdefghijklmnopqrstuvwxyz']))
plt.图(figsize=(20,3))
sns.heatmap(df.corr()[['price']]].sort_值('price',升序=False).iloc[1:7].T,
annot=True,annot_kws={'rotation':90,'size':20},
cmap='Spectral_r',vmax=0.9,vmin=-0.31)
plt.show()
您可以通过.iloc[1:7]
限制显示的单元格。如果还希望显示最大负值,可以使用.iloc[-6:://code>创建第二个绘图。要将两者结合在一起,您可以使用numpy的切片函数并编写.iloc[np.r\1:4,-3:0]
将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
df=pd.DataFrame(np.random.rand(7,27),列=['price']+[*'abcdefghijklmnopqrstuvwxyz']))
plt.图(figsize=(20,3))
sns.heatmap(df.corr()[['price']]].sort_值('price',升序=False).iloc[1:7].T,
annot=True,annot_kws={'rotation':90,'size':20},
cmap='Spectral_r',vmax=0.9,vmin=-0.31)
plt.show()
您是否尝试将.iloc[1:][/code>更改为.iloc[1:7]
?请注意,您可能还需要最大的负相关性(例如,二手车的里程数越高,价格越低)。您可以通过.iloc[-5:][/code>获取这些信息。要旋转文本,可以使用“`…,annot=True,annot_kws={'rotation':90},`@JohanC谢谢。你的评论就是答案。我把它标记为有用的评论。你能把你的评论写下来作为回答,这样我就可以接受了吗?你有没有试着把.iloc[1://code>改成.iloc[1:7]
?请注意,您可能还需要最大的负相关性(例如,二手车的里程数越高,价格越低)。您可以通过.iloc[-5:][/code>获取这些信息。要旋转文本,可以使用“`…,annot=True,annot_kws={'rotation':90},`@JohanC谢谢。你的评论就是答案。我把它标记为有用的评论。请你写下你的评论作为回答,这样我就可以接受了。谢谢你的回答。但是你写的代码实际上并不是我想要的,要回答这个简单的问题有点复杂。我把它标为有用的答案。谢谢你的回答。但是你写的代码实际上并不是我想要的,要回答这个简单的问题有点复杂。我把它标为有用的答案。