【问题标题】:How to change the order of x-axis labels in a seaborn lineplot? [duplicate]如何更改 seaborn 线图中 x 轴标签的顺序? [复制]
【发布时间】:2020-02-04 07:42:28
【问题描述】:

我有以下数据框:

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)

但是,当我尝试使用折线图时,我得到以下信息:

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'

【问题讨论】:

  • 您是否只需要在您指定的顺序周围加上括号来使其成为列表?
  • 当我用括号尝试这个时: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' object has no property 'order'
  • 尝试将sort=False 添加到您的线图中
  • 这能回答你的问题吗? How to change the plot order of the categorical x-axis(这是对类似问题的稍后回答,但它是一个更笼统的回答。)

标签: python python-3.x pandas seaborn


【解决方案1】:

sort=False 会做到的。

正如seaborn doc 所说:

排序:布尔值,可选

如果为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)

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

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 2016-09-03
    • 2019-04-03
    • 2021-11-25
    • 2015-02-10
    • 2021-04-18
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多