亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python Matplotlib (1) 將 x 軸標簽格式化為 Year-Quarter

Python Matplotlib (1) 將 x 軸標簽格式化為 Year-Quarter

白板的微信 2022-07-26 16:40:05
我想做兩件事:我想將 x 軸格式化為四分之一。我的時間序列數據以季度為單位。因此,例如,對于日期 2012-12-31 我希望它顯示為 2012Q4,對于 2013-03-31 作為 2013Q1 ,對于 2013-03-30 作為 2013Q2 等等。我可以用ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))設置格式。但是我找不到將其設置為四分之一的方法。pandas 有 Q,(pandas 將 datetimeindex 格式設置為 Quarters),但這在這里不起作用。我該怎么做呢?我希望主要的刻度定位器在季度末。我可以使用此代碼(見下文)將其設置為每個月/季度的第 30 天,但我無法弄清楚如何將其設置為每個月/季度的最后一天,因為截至 6 月的季度結束于 30 日,而3 月結束的季度于 31 日結束。dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)ax.xaxis.set_major_locator(dayloc)生成數據和繪圖的完整代碼如下:import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesfrom datetime import datetimefrom datetime import timedeltafrom pandas.plotting import register_matplotlib_convertersregister_matplotlib_converters()dti = pd.date_range('2012-12-31', periods=30, freq='Q')s1 = pd.Series(range(30),index=dti)s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)df = s2.to_frame(name='count')print(df)f1 = plt.figure("Quarterly",figsize=(10,5))ax = plt.subplot(1,1,1)dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)ax.xaxis.set_major_locator(dayloc)ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))y= [datetime.date(t) for t in df.index]z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]ax.bar(y,df['count'],width=widths)plt.setp(ax.get_xticklabels(), rotation=90)f1.tight_layout()f1.show()input()
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

試試這個,使用pd.DataFrame.to_period和熊貓情節:


import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.dates as mdates

from datetime import datetime

from datetime import timedelta

%matplotlib inline


from pandas.plotting import register_matplotlib_converters

register_matplotlib_converters()


dti = pd.date_range('2012-12-31', periods=30, freq='Q')

s1 = pd.Series(range(30),index=dti)

s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)


df = s2.to_frame(name='count')

df = df.to_period(freq='Q')

print(df)

f1 = plt.figure("Quarterly",figsize=(10,5))

ax = plt.subplot(1,1,1)

# dayloc = mdates.MonthLocator([3,6,9,12])

# ax.xaxis.set_major_locator(dayloc)

# ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))


# y= [datetime.date(t) for t in df.index]

# z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]

# widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]


# ax.bar(y,df['count'],width=widths)

df.plot.bar(ax=ax)

plt.setp(ax.get_xticklabels(), rotation=90)

f1.tight_layout()

輸出:

http://img1.sycdn.imooc.com//62dfa8ac000176e807120350.jpg

查看完整回答
反對 回復 2022-07-26
  • 1 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號