如何在熊猫中获得多级 x 轴标记图?

Posted

技术标签:

【中文标题】如何在熊猫中获得多级 x 轴标记图?【英文标题】:How do I get a multilevel x axis labelled plot in pandas? 【发布时间】:2019-05-31 23:59:53 【问题描述】:

我有一个多索引的 pandas 数据框,我可以根据需要生成正确形状的图,但是 x 轴仅显示为我的多索引的列标题。我正在寻找一种获得一组分层标签的方法。

我目前拥有的:

Current Data Frame

The plot using : df.plot(x=None, y=['Published NIV','Future NIV'], kind='line')

Circled in blue is how I want the axis to look

【问题讨论】:

你想要在 Python 中这样的东西:community.qlik.com/legacyfs/online/… 对吗? 是的,请完全一样的东西! Matplotlib 提供主要和次要刻度级别。它们原则上可以用于您拥有的两个级别的索引。我无法在此处显示代码,因为问题中没有可用的代码/数据。 【参考方案1】:

这是我在 *** 上工作最多的问题。我希望这完全适合您的问题。

所以,您的期间值是从 1 到 48,假设这是我得到这个的唯一方法,这是半小时数据,我所做的是我在提供的日期的半小时内更改了这些值,并且然后使用格式将其更改为 datetimeindex ,然后创建绘图。

这是代码和最终输出:

m=pd.read_csv("Data3.csv")
final=m[['Published NIV','Future NIV']]

new2=['0:00:00' if a==1 else str(a//2-1)+':30:00' if a%2==0 else str(a//2)+':00:00' for a in m['Settlement Period']]

alpha=m['Settlement Date']+'-'+new2

final.index=pd.to_datetime(alpha,format='%Y-%m-%d-%X')
final.plot(figsize=(15,9))

输出是:

我看到此代码的唯一缺点是您不会得到 1 到 48 的周期数,通过一些解决方法我可以尝试恢复,但请告诉我这是否适合您的情况。

【讨论】:

首先感谢您的回答,对我来说麻烦的是我的多重索引包含一个日期和一个从 1 到 48 的数字。所以不幸的是,我认为它不会完全奏效.不过,它肯定会在正确的树上吠叫。如果您查看问题中的其中一个屏幕截图,您会看到我在说什么。 好吧,我假设日期是年份,数字是星期,所以通过使用 datetimeindex 它可以自己创建图表。如果您通过 Google Drive 或其他方式向我发送 toydata,我可以尝试一下。 啊,我知道我对这一切有点陌生,但我可以用我的数据框向您发送一个 csv 吗?而要得到我是否只需要设置结算日期和结算期限的索引? 分享csv的链接,我看看能不能得到想要的输出。 drive.google.com/file/d/1h8dCQC-CWZ12P-EysmQHz3uR6xAh-I50/…

以上是关于如何在熊猫中获得多级 x 轴标记图?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫时间序列图设置 x 轴主要和次要刻度和标签

将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴

在 D3.js 中创建带有序数刻度的文本标记 x 轴

如何在 Y 轴 ggplot2 中标记更多断点

如何使用熊猫数据框中的列标记气泡图/散点图?

熊猫条形图中的刻度标签重叠