如何在 x 轴上写下每个日期?

问题描述 投票:0回答:2

获取库存

aaa
通过网络API:

import requests,json,time
import pandas as pd
from pandas import json_normalize
ticker = 'aaa'
start_date='2020-01-01'
end_date='2023-05-10'
fd = int(time.mktime(time.strptime(start_date, "%Y-%m-%d")))
td = int(time.mktime(time.strptime(end_date, "%Y-%m-%d")))
data = requests.get('https://apipubaws.tcbs.com.vn/stock-insight/v1/stock/bars-long-term?ticker={}&type=stock&resolution=D&from={}&to={}'.format(ticker, fd, td)).json()
df = json_normalize(data['data'])
df['tradingDate'] = pd.to_datetime(df.tradingDate.str.split("T", expand=True)[0])
df.columns = ['open', 'high', 'low', 'close', 'volume', 'date']

准备用于绘图的 x,y 数据:

x = df['date'][0:30]
y = df['close'][0:30]

画图:

plt.plot(x,y)
plt.xticks(rotation=90)
plt.show()

原始数据(x,y)中有30个日期,

plt.show()
只画出部分日期,怎么把x轴的30个日期都画出来?

>>> min(x)
Timestamp('2020-01-02 00:00:00')
>>> max(x)
Timestamp('2020-02-19 00:00:00')
>>> len(x)
30

我想写从

2020-01-02
2020-02-19
的每个日期,x 轴上显示 30 个日期。

python-3.x date matplotlib axis
2个回答
0
投票

将时间戳转换为字符串并提取部分

xxxx-xx-xx
.

x=x.apply(lambda x:str(x)[0:10])
plt.plot(x,y)
plt.xticks(rotation=90)
plt.show()

0
投票

如果你想显示每个日历日期,你可以在底部添加这些行。这将显示每个日历日期(50 个条目)...

import matplotlib.dates as mdates
from matplotlib import dates
plt.gca().xaxis.set_major_locator(dates.DayLocator(interval=1))   #to get a tick every day
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))     #optional formatting 
plt.show()

但是,如果您只想查看

x
中有数据的日期,则需要在
plt.show()
之前添加此行以及上面的代码。这将显示 30 个条目....

plt.gca().set_xticks(x)

© www.soinside.com 2019 - 2024. All rights reserved.