簡體   English   中英

Seaborn 色相和尺寸圖例

[英]Seaborn Hue and Size Legend

我正在嘗試更改使用 Seaborn 創建的 plot 的圖例中的垃圾箱。 數據是從 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.)

圖片: 在此處輸入圖像描述

有人知道如何解決這個問題嗎?

謝謝

您可以更改圖例,但由於您使用的是 data.frame 和 seaborn,因此一種選擇是讓您的huesize分類開始,並提供匹配的 label 或sns.scatterplot

例如:

導入 matplotlib.pyplot 作為 plt 導入 seaborn 作為 sns 導入 numpy 作為 np

np.random.seed(999) df_factor = pd.DataFrame(np.random.uniform(0,100,(20,4)),columns=['估值','質量','增長','動量'])

在這里,我們介紹另一個將兩列離散化的列。 您也可以覆蓋它或使用 function。 下面我使用 pd.cut 分配 0 到 20(包括 20)之間的值來獲得 label 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.)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM