使用数据框更改绘图 Seaborn Facetgrid 中同一行的线型

Posted

技术标签:

【中文标题】使用数据框更改绘图 Seaborn Facetgrid 中同一行的线型【英文标题】:Change the line style of the same line in a plot Seaborn Facetgrid using a dataframe 【发布时间】:2021-02-02 01:05:55 【问题描述】:

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

线型在预定的 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 参数来更改线条样式。这不仅会导致虚线部分的颜色不同(我不想要),而且还会与我使用色调部分来区分数据集发生冲突。

注意:我也在使用 Facetgrid 的行和列功能,但为了简单起见,我排除了这些功能。

【问题讨论】:

虚线段需要单独的一行。请参阅this 答案。 【参考方案1】:

我认为您的问题是您只有一个标记为“虚线”的点,而您至少需要 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")

【讨论】:

以上是关于使用数据框更改绘图 Seaborn Facetgrid 中同一行的线型的主要内容,如果未能解决你的问题,请参考以下文章

使用 seaborn 绘图时如何处理缺失值?

使用数据框中的列为 seaborn 图的背景着色

数据可视化专题——Seaborn简介

seaborn使用(绘图函数)

Python 数据科学中的 Seaborn 绘图可视化

Seaborn 热图更改 yticks 的日期频率