Seaborn 色调和尺寸图例

Posted

技术标签:

【中文标题】Seaborn 色调和尺寸图例【英文标题】:Seaborn Hue and Size Legend 【发布时间】:2020-10-24 13:20:03 【问题描述】:

我正在尝试更改使用 Seaborn 创建的情节传说中的垃圾箱。数据从 0 到 100,但 Seaborn 的垃圾箱从 1 到 120 和 0 到 80。我尝试使用 hue_normsize_norm,但无济于事。

请看下面的代码和附图:

import matplotlib.pyplot as plt
import seaborn as sns
from import_portfolio import df, portfolio
import numpy as np
from adjustText import adjust_text

df_factor = df[df.columns[df.columns.str.contains('Factor Percentile')]]

columns = []
for column in df_factor.columns:
    split = str.split(column, sep=' ')
    fac = split[split.index('Factor') - 1]
    columns.append(fac)

df_factor.columns = columns
df_factor['Symbol'] = df['Symbol'].copy()
df_factor = df_factor.replace(' ', np.NaN)

plt.figure(figsize=(13,7))
ax = sns.scatterplot(data=df_factor.dropna(), x='Valuation', y='Quality', hue='Momentum', size='Growth', palette='RdYlGn', sizes=(20,150))
plt.xlim(0,100)
plt.ylim(0,100)

adjust_text(texts, arrowprops=dict(arrowstyle='-', color='k', lw=0.5))

plt.legend(bbox_to_anchor=(1.05,1), loc=2, borderaxespad=0.)

图片:

有人知道如何解决这个问题吗?

谢谢

【问题讨论】:

【参考方案1】:

您可以更改图例,但由于您使用的是 data.frame 和 seaborn,因此一种选择是让您的 huesize 类别开始,并为 sns.scatterplot 提供匹配的标签或颜色

例如:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

np.random.seed(999)
df_factor = pd.DataFrame(np.random.uniform(0,100,(20,4)),columns=['Valuation','Quality','Growth','Momentum'])

这里我们介绍另一列离散化两列。您也可以覆盖它或使用函数。下面我使用pd.cut来分配0到20(包括20)之间的值来有一个标签20,21-40有一个label40等等:

df_factor['Growth_lvl'] = pd.cut(df_factor['Growth'],[0,20,40,60,80,100],labels=[20,40,60,80,100])
df_factor['Momentum_lvl'] = pd.cut(df_factor['Momentum'],[0,20,40,60,80,100],labels=[20,40,60,80,100])

plt.figure(figsize=(13,7))
ax = sns.scatterplot(data=df_factor.dropna(), x='Valuation', y='Quality', hue='Momentum_lvl', 
                     size ='Growth_lvl', palette='RdYlGn',
                     sizes = list(np.arange(10,100,20)),
                     hue_order= [20,40,60,80,100])
plt.xlim(0,100)
plt.ylim(0,100)

plt.legend(bbox_to_anchor=(1.05,1), loc=2, borderaxespad=0.)

【讨论】:

以上是关于Seaborn 色调和尺寸图例的主要内容,如果未能解决你的问题,请参考以下文章

删除 Seaborn 条形图图例标题

将 seaborn 情节图例移动到不同的位置

多个重叠图的 Seaborn 图例修改

AttributeError:seaborn 中的未知属性图例

如何删除图例的特定部分(seaborn,散点图)

在seaborn tsplot中将图例移到图外