Python 如何创建带有季度和年度标签以及月度刻度的折线图?

Python 如何创建带有季度和年度标签以及月度刻度的折线图?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个月-年数据,在yyyy-mm-01中有一个日期-时间字段。是否有一种方法可以显示XLabel,其中业务季度作为次要标签,年份作为主要标签,同时保留数字记号以与一年中的月份对齐 先谢谢你 以下代码提供了一个解决方案 import numpy as np import pandas as pd import matplotlib.pyplot as plt 数据示例: df = pd.DataFrame([{'date': '3/22/20', 'quarter': 1, 'val':2}

我有一个月-年数据,在yyyy-mm-01中有一个日期-时间字段。是否有一种方法可以显示XLabel,其中业务季度作为次要标签,年份作为主要标签,同时保留数字记号以与一年中的月份对齐

先谢谢你


以下代码提供了一个解决方案

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
数据示例:

df = pd.DataFrame([{'date': '3/22/20', 'quarter': 1, 'val':2},{'date': '3/22/20', 'quarter': 1, 'val':5}, {'date': '6/22/20', 'quarter': 3, 'val':7},{'date': '6/22/20', 'quarter': 3, 'val':8}, {'date': '9/22/20', 'quarter': 2, 'val':10},{'date': '11/22/20', 'quarter': 2, 'val':11}])
换成25美分的硬币

df['date'] = pd.to_datetime(df.date)
df['quarter'] = pd.PeriodIndex(df['date'], freq='Q')
df['quarterc'] = df['quarter'].astype('string')
Matplotlib的x轴不接受季度数据类型
period[Q-DEC]
,但
string
有效

plt.plot(df['quarterc'], df['val'])
plt.show()

plt.plot(df['quarterc'], df['val'])
plt.show()

您可以使用主刻度来显示每个季度和年初的标签,也可以使用不带标签的小刻度来指示每个月。主刻度和刻度标签可以使用列表理解来创建,这些列表理解利用了时间戳的时间属性。下面是一个完整的示例:

import numpy as np   # v 1.19.2
import pandas as pd  # v 1.1.3

# Create sample time series with a month start frequency and plot it with pandas
rng = np.random.default_rng(seed=1) # random number generator
dti = pd.date_range('2016-01-01', '2020-12-01', freq='MS')
df = pd.DataFrame(dict(actuals=rng.integers(-5000, 5000, size=dti.size)), index=dti)
ax = df.plot(figsize=(10,4))

# Create lists of quarter ticks and tick labels using the DatetimeIndex timestamps (ts)
ticks = df.index[df.index.month%3 == 1]
labels = [f'Q{int(ts.month/3)+1}\n{ts.year}' if ts.month == 1
          else f'Q{int(ts.month/3)+1}' for ts in ticks]

# Set quarter major ticks with labels and monthly minor ticks without labels
ax.set_xticks(ticks)
ax.set_xticks(df.index, minor=True)
ax.set_xticklabels(labels);

您可能想将日期转换为四分之一,看到我的回答了吗?@RuthgerRighart,谢谢您的建议。但是,我正在寻找一个标签设计,显示季度作为次要和主要的一年。在您的示例中,它是作为绘图的主要标签的季度。