使用数据框更改绘图 Seaborn Facetgrid 中同一行的线条样式
Change the line style of the same line in a plot Seaborn Facetgrid using a dataframe
我正在尝试创建一个像
这样的情节
其中线条样式在预定的 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()
我怎样才能成功实现这一目标?
编辑:感谢 的建议,我还没有找到。但是它没有回答我的问题,因为该问题依赖于使用 hue
参数来更改线型。这不仅会导致虚线部分的颜色不同(我不想要),还会与我使用色相部分按数据集区分相冲突。
注意:我也在使用 Facetgrid 的行和列功能,但为了简单起见,我排除了这些功能。
我认为您的问题是您只有一个标记为 'dashed' 的点,而您至少需要 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")
我正在尝试创建一个像
这样的情节其中线条样式在预定的 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()
我怎样才能成功实现这一目标?
编辑:感谢 hue
参数来更改线型。这不仅会导致虚线部分的颜色不同(我不想要),还会与我使用色相部分按数据集区分相冲突。
注意:我也在使用 Facetgrid 的行和列功能,但为了简单起见,我排除了这些功能。
我认为您的问题是您只有一个标记为 'dashed' 的点,而您至少需要 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")