如何在seaborn中显示所有数字图例值?

Posted

技术标签:

【中文标题】如何在seaborn中显示所有数字图例值?【英文标题】:How to display all numeric legend values in seaborn? 【发布时间】:2020-12-12 08:34:14 【问题描述】:

我正在尝试为以下数据框创建sns.lineplot()

overs:

    season  over    total_runs  total_overs avg_run
0   2008    1            703       745     0.943624
1   2008    2            923       741     1.245614
2   2008    3            826       727     1.136176
3   2008    4            912       725     1.257931
4   2008    5            1017      722     1.408587
235 2019    16           1099      721     1.524272
236 2019    17           1035      707     1.463932
237 2019    18           1124      695     1.617266
238 2019    19           1209      669     1.807175
239 2019    20           1189      552     2.153986
240 rows × 5 columns

sns.lineplot(x='avg_run', y='over', hue='season', data='overs')

我得到如下输出:

我没有得到整个赛季的传奇(范围:2008-2019),我无法区分当前的lineplots。 请注意:我的要求是在同一图中绘制所有线

【问题讨论】:

【参考方案1】: 尝试将legend='full' 参数用于seaborn.lineplot() 当图例值为数字时,这可能是必要的。 有不同的color palettes可供选择。
import pandas as pd
import numpy as np
import seaborn as sns

# test data
sample_length = range(1, 6+1)
rads = np.arange(0, 2*np.pi, 0.01)
data = np.array([np.sin(t*rads) for t in sample_length])
df = pd.DataFrame(data.T, index=pd.Series(rads.tolist(), name='radians'), columns=sample_length)

dfl = df.stack().reset_index().rename(columns='level_1': 'frequency', 0: 'amplitude')

# plot
sns.lineplot(x='radians', y='amplitude', hue='frequency', data=dfl, legend='full', palette='winter')

自定义颜色图

为绘图中的线条数选择具有足够独特颜色的调色板。 husl 调色板的其他选项可以在seaborn.husl_palette 找到 colors也可以是手动选择颜色的列表 colors = ['red', 'blue', 'green', 'black', 'purple', 'yellow']
# create color mapping based on all unique values of frequency
freqs = dfl.frequency.unique()
colors = sns.color_palette('husl', n_colors=len(freqs))  # get a number of colors
cmap = dict(zip(freqs, colors))  # zip freqs to colors and create a dict

sns.lineplot(x='radians', y='amplitude', hue='frequency', data=dfl, legend='full', palette=cmap)

【讨论】:

@PratyushSaxena 太棒了!很高兴这解决了您的问题。 我需要更多帮助。我正在尝试将图例拆分为 2 列。但是传奇的标题(季节)正在随之移动。我可以将图例值拆分为 2 列来修复中心的标题吗?谢谢... @PratyushSaxena 我看到做多列的唯一方法是使用plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', ncol=2)。如果这不能解决问题,我会提出一个单独的问题。我没有处理太多自定义图例。 locanchor 可以采用其他值。 Legend

以上是关于如何在seaborn中显示所有数字图例值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在seaborn的stripplot图例中更改标记

多个重叠图的 Seaborn 图例修改

如何将seaborn图例拆分为多列?

在图例中使用不同的颜色和形状 [Seaborn,Python]

如何在 seaborn 散点图中编辑多个图例框?

无法在 seaborn distplot 中显示图例