微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用数据框更改情节Seaborn Facetgrid中同一行的线条样式

如何解决使用数据框更改情节Seaborn Facetgrid中同一行的线条样式

我正在尝试创建类似的情节

this one

其中,线型在预定的x值之后发生变化。我将Seaborn Facetgrid与整洁格式的pandas数据框一起使用。

我的输入数据框如下:

>>> print(plot_df)
dataset  x  y  style
dogs     1  2  solid
dogs     2  3  solid
dogs     3  1  solid
dogs     5  6  dashed
cats ....

我尝试如下使用hue_kws,但这无效。

style_list = plot_df[style].tolist()
g = sns.FacetGrid(plot_df,hue="dataset",hue_kws={"ls":style_list})
g.map(plt.plot,"x","y").add_legend()

我如何成功实现?

编辑:谢谢您对other similar question的建议,但我没有发现。但是,它不能回答我的问题,因为该问题取决于使用hue参数来更改线型。这不仅会导致该行的虚线部分具有不同的颜色(我不希望如此),而且还会与我使用hue部分以按数据集进行区分产生冲突。

注意:我还使用了Facetgrid的行和列功能,但为简单起见,我将其排除在外。

解决方法

我认为您的问题是,当您至少需要2个点来画一条线时,您只有一个标记为“虚线”的点。 我建议如下:

cutoff_x = 3
d = '''
dataset  x  y
dogs     1  2
dogs     2  3
dogs     3  1
dogs     5  6'''
df1 = pd.read_csv(StringIO(d),sep='\\s+',header=0)
dataset    x   y
0  dogs    1   2
1  dogs    2   3
2  dogs    3   1
3  dogs    5   6
df2 = df1.loc[df1['x']>=cutoff_x].assign(style='dashed')
dataset    x   y   style
2  dogs    3   1   dashed
3  dogs    5   6   dashed
df = df1.drop(df1.loc[df1['x']>cutoff_x].index).assign(style='solid').append(df2,ignore_index=True)
dataset    x   y   style
0  dogs    1   2   solid
1  dogs    2   3   solid
2  dogs    3   1   solid
3  dogs    3   1   dashed
4  dogs    5   6   dashed
g = sns.FacetGrid(df,hue="dataset")
g.map_dataframe(sns.lineplot,"x","y",style="style")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。