如何在Seaborn折线图中更改x轴标签的顺序?

7

I have the following data frame:

df1_Relax_Pulse_Melted.head()

Task    Pulse Time  Pulse Measure
0   Language    PRE_RELAX_PULSE 90.0
1   Language    PRE_RELAX_PULSE 94.0
2   Language    PRE_RELAX_PULSE 52.0
3   Language    PRE_RELAX_PULSE 70.0
4   Language    PRE_RELAX_PULSE 84.0

当我尝试对这些数据进行条形图绘制时,结果如下所示:
ax = sns.barplot(x="Pulse Time", y="Pulse Measure", hue="Task", data=df1_Relax_Pulse_Melted)

enter image description here

然而,当我尝试使用折线图时,出现了以下情况:

ax = sns.lineplot(x="Pulse Time", y="Pulse Measure", hue="Task", data=df1_Relax_Pulse_Melted)

如图所示,x轴标签的顺序与柱状图不同。在线图中是否可以更改x轴的顺序?我尝试在sns.lineplot中使用“order”函数,如下所示:

这是图片描述

ax = sns.lineplot(x="Pulse Time", y="Pulse Measure", hue="Task", data=df1_Relax_Pulse_Melted, order='PRE_RELAX_PULSE','30S_RELAX_PULSE','POST_RELAX_PULSE')

然而,这会产生一个错误。
“AttributeError: 'Line2D'对象没有'order'属性。”

你只需要在你指定的顺序周围加上括号就可以将其变成列表吗? - BallpointBen
当我尝试使用括号时:ax = sns.lineplot(x="Pulse Time", y="Pulse Measure", hue="Task", data=df1_Relax_Pulse_Melted, order=['PRE_RELAX_PULSE','30S_RELAX_PULSE','POST_RELAX_PULSE'])。它仍然给我以下错误:'Line2D'对象没有属性'order'。 - arkadiy
尝试在您的线图中添加 sort=False - adrianp
4
这个问题的答案是否对您有帮助?如何更改分类x轴的绘图顺序 (这是一个类似问题的后来回答,但它更为通用。) - Roger Vadim
1个回答

14

sort=False会实现这个功能。

正如seaborn doc所述:

sort:布尔型,可选参数

如果为True,则数据将按照x和y变量进行排序,否则线条将按照出现在数据集中的顺序连接点。

x变量按其“字符串顺序”进行排序:

'30s_RELAX_PULSE' < 'POST_RELAX_PULSE' < 'PRE_RELAX_PULSE'

不需要的行为。

所需的行为是按x值聚合。这是使用estimator='mean'(默认)完成的。每个“Pulse Measure”(y)都按“Pulse Time”(x)分组,然后计算平均值。

ax = sns.lineplot(x="Pulse Time", y="Pulse Measure", hue="Task",sort= False, data=df1_Relax_Pulse_Melted)

我的绘图与其他样本数据:

correct order of the x variables


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接