如何更改分类 x 轴的绘图顺序

2023-12-31

我得到了一个数据框,如下所示:

df:

Time of Day Season  value
Day        Shoulder 30.581606
Day        Summer   25.865560
Day        Winter   42.644530
Evening    Shoulder 39.954759
Evening    Summer   32.053458
Evening    Winter   53.678297
Morning    Shoulder 32.171245
Morning    Summer   25.070815
Morning    Winter   42.876667
Night      Shoulder 22.082042
Night      Summer   17.510290
Night      Winter   33.262356

我使用seaborn使用以下代码绘制线图中的值:

g = sns.lineplot(x='Time of Day',y='value',data=df,hue='Season')

它生成以下图表:

该图的问题在于 x 轴的顺序不是所需的顺序。我想将 a 轴值的顺序更改为 ['Morning', 'Day','Evening','Night']。我尝试使用以下命令更改它:

g.set_xticklabels(['Morning','Day','Evening','Night'])

但该命令仅更改 x 轴的标签,而不更改数据点的顺序。有人可以帮我解决这个问题吗?


  • Use pandas.Categorical https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Categorical.html设置分类顺序'Time of Day' in the df.
  • 测试于python 3.11, pandas 1.5.3, matplotlib 3.7.1, seaborn 0.12.2
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = {'Time of Day': ['Day', 'Day', 'Day', 'Evening', 'Evening', 'Evening', 'Morning', 'Morning', 'Morning', 'Night', 'Night', 'Night'],
        'Season': ['Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter'],
        'value': [30.581606, 25.865560000000002, 42.644529999999996, 39.954759, 32.053458, 53.678297, 32.171245, 25.070815, 42.876667, 22.082042, 17.510289999999998, 33.262356]}

# create dataframe
df = pd.DataFrame(data)

# set categorical order
df['Time of Day'] = pd.Categorical(df['Time of Day'],
                                   categories=['Morning', 'Day', 'Evening', 'Night'],
                                   ordered=True)

# plot
ax = sns.lineplot(x='Time of Day', y='value', data=df, hue='Season')
sns.move_legend(ax, bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)

  • If you are plotting data against a categorical x-axis, then consider using a categorical plot https://seaborn.pydata.org/tutorial/categorical.html like sns.pointplot https://seaborn.pydata.org/generated/seaborn.pointplot.html, where the x-axis can be ordered with the order parameter.
    • The 图形级 https://seaborn.pydata.org/tutorial/function_overview.html#figure-level-vs-axes-level-functions plot, sns.catplot https://seaborn.pydata.org/generated/seaborn.catplot.html with kind='point'也有效。
order=['Morning', 'Day', 'Evening', 'Night']

ax = sns.pointplot(x='Time of Day', y='value', data=df, hue='Season', order=order, marker='')
sns.move_legend(ax, bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改分类 x 轴的绘图顺序 的相关文章

随机推荐

  • CMake 安装目标依赖项

    我正在编写一个包含库本身和示例的库 并且我正在使用 CMake cmake minimum required VERSION 3 6 add executable example main cpp install DIRECTORY inc
  • 断开连接时 Firebase 更新

    我在 firebase 上有一个节点 列出了游戏中的所有玩家 当新玩家加入时 此列表将更新 当当前用户 我 断开连接时 我想将自己从列表中删除 由于列表会随着时间的推移而变化 在我断开连接的那一刻 我想更新此列表并更新 firebase 这
  • javascript var 和 not var 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • 如果在离线状态下加载/刷新页面,JavaScript 后台同步将停止工作

    我目前正在学习如何使用后台同步来允许用户在离线使用网络应用程序时进行 PUT POST 更改 我按照杰克 阿奇博尔德 Jake Archibald 的指示进行操作后台同步简介 https developers google com web
  • 如何在 Asyncstorage 中设置多个值

    如何在 Asyncstorge 中设置多个值 因为我正在尝试设置token and user id 这些是服务器响应值 这就是响应的样子 json error 0 data User registered Successfully user
  • NSArray 基于密钥的 Tokenize

    我已经从服务器获取了数据并且传递的数据也填充了NSMutableArray after NSJSONSerialization 数组输出如下 NSArray jsonArray NSArray json NSLog Array jsonAr
  • 是否可以检测文件是否实际下载

    假设我有一个返回的控制器操作方法FileResult 是否可以检测文件是否被实际下载的完全交给客户 public ActionResult GetFile int id DownloadInfo data provider GetInfo
  • CUDA 中的块间同步

    我为这个问题搜索了一个月 我无法同步 CUDA 中的块 我读过很多关于atomicAdd 合作组等的文章 我决定使用一个全局数组 这样一个块就可以在全局数组的一个元素上写入 写入之后 块的线程将等待 即陷入 while 循环 直到所有块都写
  • 获取 Windows 窗体的大小

    我正在创建一个 Windows 窗体应用程序 如何捕获 Windows 窗体的大小 目前我的代码中有一些看起来像这样的东西 PictureBox display new PictureBox display Width 360 displa
  • 如何将 Json.NET 中缺失的属性反序列化为默认值?

    我有一个用 DataContract 和 DataMember 属性注释的类 部分成员被标记为DataMember IsRequired true 当我通过 Json NET 线路序列化实例时 所需的对象成员具有 null 值 那么它们的序
  • 请解释一下这个 Javascript 闭包练习 [重复]

    这个问题在这里已经有答案了 我是一个 javascript 菜鸟 试图理解下面的闭包练习 现在 我知道结果是 122 任何人都可以引导我一步步完成这个过程 什么被传递到什么 以便我能够理解闭包是如何工作的 var hidden myster
  • Android TTS 文本长度超过 4k 字符无法播放

    我在用TextToSpeech有时会播放一些长文本 我注意到从那以后Android 4 1 2如果文本长度超过 4000 个字符 则不会播放 我没有收到任何错误 但文本不会播放 直到现在我才能够重现这个Android 4 1 2 三星 Ga
  • maven - 当单元测试花费太长时间时构建失败

    我的项目中有很多用 JUnit 和 TestNG 编写的单元测试 构建过程基于带有surefire插件的maven 当至少一个单元测试花费太多秒时 是否有任何方法 插件使 Maven 构建失败 我知道有一些插件在 TeamCity Jenk
  • 在 Python 代码中参数化 MySQL IN 子句

    我正在看这个类似的问题 参数化 SQL IN 子句 https stackoverflow com questions 337704 parameterize an sql in clause但解决方案不是使用Python 所以我不得不提出
  • 使用委托的新实例取消注册事件

    EventHandler a new EventHandler control RegionChanged EventHandler b new EventHandler control RegionChanged if a b Conso
  • Python 2:集合和列表的“in”关键字的不同含义

    考虑这个片段 class SomeClass object def init self someattribute somevalue self someattribute someattribute def eq self other r
  • 创建条件图 python [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我只想绘制小于或等于某个数字 假设为 15 的值 我可以在数据帧的一列中找到这些值 如果这些值不小于或等于 15 我不想绘制它们 你能帮我找
  • django用户模型和自定义主键字段

    默认情况下 Django 在每个名为 的模型上创建一个主键字段 id 具有一种类型AutoField 在我的模型上 我将覆盖它以使用自定义UUIDField使用 作为主键primary key 属性 我也想要User模型中django co
  • 在CPU密集型任务上使用await关键字与Task.Wait()方法有什么区别?

    会是什么机械的之间的区别 async void LongIOBoundWorkWithSomeCPUBoundWorkAsWellAsync await Task Run CPUBoundWork Do IO bound work awai
  • 如何更改分类 x 轴的绘图顺序

    我得到了一个数据框 如下所示 df Time of Day Season value Day Shoulder 30 581606 Day Summer 25 865560 Day Winter 42 644530 Evening Shou