【问题标题】:Seaborn multi line plot with only one line coloredSeaborn 多线图,只有一条线着色
【发布时间】:2021-12-28 17:06:35
【问题描述】:

我正在尝试使用 sns 绘制多线图,但仅将美国线保持为红色,而其他国家/地区为灰色

这是我目前所拥有的:

df = px.data.gapminder()
sns.lineplot(x = 'year', y = 'pop', data = df, hue = 'country', color = 'grey', dashes = False, legend = False)

但这不会将线条更改为灰色。我在想,在这之后,我可以在红色中单独添加美国线.....

【问题讨论】:

标签: python matplotlib seaborn linechart


【解决方案1】:

你可以使用 pandas groupby 来绘图:

fig,ax=plt.subplots()
for c,d in df.groupby('country'):
    color = 'red' if c=='US' else 'grey'
    d.plot(x='year',y='pop', ax=ax, color=color)

ax.legend().remove()

输出:

或者您可以将特定的调色板定义为字典:

palette = {c:'red' if c=='US' else 'grey' for c in df.country.unique()}

sns.lineplot(x='year', y='pop', data=df, hue='country', 
             palette=palette, legend=False)

输出:

【讨论】:

  • 处理调色板的绝佳方式,有没有办法保留默认调色板的原始颜色,但将其余颜色设为灰色?
  • @DavidHernandez 使用 pandas.groupby() 方法,您可以选择仅在满足条件时通过 color='grey'if c in some_list: d.plot(...) else: d.plot(..., color='grey')
  • 谢谢@QuangHoang 我创建了这个问题也许你可以在那里发布答案?我提供了更多信息stackoverflow.com/questions/69840973/…
【解决方案2】:

您可以使用palette 参数将线条的自定义颜色传递给sns.lineplot,例如:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({'year': [2018, 2019, 2020, 2018, 2019, 2020, 2018, 2019, 2020, ], 
                   'pop': [325, 328, 332, 125, 127, 132, 36, 37, 38], 
                   'country': ['USA', 'USA', 'USA', 'Mexico', 'Mexico', 'Mexico',
                               'Canada', 'Canada', 'Canada']})

colors = ['red', 'grey', 'grey']
sns.lineplot(x='year', y='pop', data=df, hue='country', 
             palette=colors, legend=False)

plt.ylim(0, 350)
plt.xticks([2018, 2019, 2020]);

尽管有一个图例仍然很有用,因此您可能还需要考虑修改 alpha 值(以下元组中的最后一个值)以突出显示美国。

red = (1, 0, 0, 1)
green = (0, 0.5, 0, 0.2)
blue = (0, 0, 1, 0.2)
colors = [red, green, blue]

sns.lineplot(x='year', y='pop', data=df, hue='country', 
             palette=colors)

plt.ylim(0, 350)
plt.xticks([2018, 2019, 2020]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2014-07-02
    • 2018-11-20
    • 2016-02-07
    • 2020-06-27
    • 2021-07-18
    相关资源
    最近更新 更多