首页 > 解决方案 > 绘制具有相同颜色的多条线,但使用色调来分隔线

问题描述

我有这些数据,我想为每个 Obs 的 Age vs Predicted Probability 绘制一条线。

Age    Predicted Probability  Obs
18.0   0.206                  3.0
15.0   0.206                  3.0
34.0   0.154                  3.0
52.0   0.124                  3.0
46.0   0.146                  3.0
18.0   0.000                  2.0
15.0   0.000                  2.0
34.0   0.000                  2.0
52.0   0.098                  2.0
46.0   0.002                  2.0
18.0   0.000                  1.0
15.0   0.000                  1.0
34.0   0.004                  1.0
52.0   0.078                  1.0
46.0   0.006                  1.0
18.0   0.038                  0.0
15.0   0.032                  0.0
34.0   0.384                  0.0
52.0   0.318                  0.0
46.0   0.348                  0.0

我通过seaborn中的以下代码做到了这一点:

sns.lineplot(data=df, x="Age", y="Predicted Probability", hue = 'Obs')       

使用色调参数。但我不希望每条线都有不同的颜色。事实上,我希望每个 Obs 都有一条黑线。我怎样才能做到这一点?

标签: pythonpandasseaborn

解决方案


您可以通过色调破折号更改线条的外观

  1. 色调颜色取决于 color_palette

您可以seaborn.set_palette在绘图之前使用来设置自定义或任何预定义的调色板,当您在同一个绘图上绘制不同的数据时可以使用这些调色板。可以从 seaborn doc 中查看更多示例和信息, 您可以在文档中找到首选颜色,或者可以定义
用于传递给 set_palette 的调色板 seaborn.color_palette 对象

# Create an array with the colors you want to use
colors = ["#FF0B04", "#4374B3"]# Set your custom color palette

sns.set_palette(sns.color_palette(colors))
#plot anything with hue ...first color takes category and so on 
sns.lineplot(data=df, x="Age", y="Predicted Probability", hue = 'Obs')       

对你也有帮助如何在 Seaborn 中使用自己的调色板 作者:Carolina Bento 2019 年 8 月 22 日·3 分钟阅读

  1. 你也可以使用破折号

如果你不喜欢使用hue ,你也可以在 lineplot 函数中尝试这个dashes属性:

破折号:布尔值、列表或字典

确定如何为样式变量的不同级别绘制线条的对象。设置为 True 将使用默认破折号,或者您可以将破折​​号列表或样式变量的字典映射级别传递给破折号。设置为 False 将对所有子集使用实线。破折号在 matplotlib 中指定:(段,间隙)长度的元组,或用于绘制实线的空字符串。

sns.lineplot(x="Age", y="Predicted Probability",style='Obs',dashes=[(1,1),(5, 10)],data=df)

本文可以帮助您修改大多数线图属性


推荐阅读