如何解决使用数据框更改情节Seaborn Facetgrid中同一行的线条样式
我正在尝试创建类似的情节
其中,线型在预定的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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。