Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matplotlib-seaborn-相关图上的数字不可读_Matplotlib_Seaborn - Fatal编程技术网

matplotlib-seaborn-相关图上的数字不可读

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)

下图显示了一列的相关性。问题是数字不可读,因为其中有许多列

怎么可能只显示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)

注释也可以是标签列表。使用此选项,可以定义用于显示所需数字的字符串矩阵,并将其他数字设置为空字符串

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谢谢。你的评论就是答案。我把它标记为有用的评论。请你写下你的评论作为回答,这样我就可以接受了。谢谢你的回答。但是你写的代码实际上并不是我想要的,要回答这个简单的问题有点复杂。我把它标为有用的答案。谢谢你的回答。但是你写的代码实际上并不是我想要的,要回答这个简单的问题有点复杂。我把它标为有用的答案。