如何在 matplotlib 中设置日期的 xticklabels

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

我正在尝试绘制两个列表中的值。 x 轴值是日期。到目前为止尝试过这些事情

year = [20070102,20070806,20091208,20111109,20120816,20140117,20140813]
yvalues = [-0.5,-0.5,-0.75,-0.75,-0.5,-1.25,-1.25]

dates = [datetime.datetime.strptime(str(int(date)),'%Y%m%d') for date in year]

fig, axes = plt.subplots(1, 1, figsize=(16, 9), dpi=100)

line1, = axes.plot(dates,yvalues, lw=2, marker='*', color='r')
axes.legend([line1],['VALUES'],loc=1)
axes.grid()
axes.set_xlabel('YEAR')
axes.set_ylabel('VALUES')

yticks = [-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0]
axes.set_yticks(yticks)
axes.set_yticklabels(["$%.2f$" % y for y in yticks]);

axes.set_xticks(dates)
#axes.set_xticklabels()

身材看起来不错。但无法正确标记 x 轴刻度。 我正在尝试用 2007-01-02 或 2007 Jan 之类的内容来标记 x 轴。

提前致谢

python matplotlib
2个回答
13
投票

您可以使用

DateFormater
控制日期的格式:

import matplotlib.dates as mdates
xfmt = mdates.DateFormatter('%Y-%m-%d')
axes.xaxis.set_major_formatter(xfmt)

import datetime as DT
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

year = [20070102,20070806,20091208,20111109,20120816,20140117,20140813]
yvalues = [-0.5,-0.5,-0.75,-0.75,-0.5,-1.25,-1.25]

dates = [DT.datetime.strptime(str(int(date)),'%Y%m%d') for date in year]

fig, axes = plt.subplots(1, 1, figsize=(16, 9), dpi=100)

line1, = axes.plot(dates,yvalues, lw=2, marker='*', color='r')
axes.legend([line1],['VALUES'],loc=1)
axes.grid()
axes.set_xlabel('YEAR')
axes.set_ylabel('VALUES')

yticks = [-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0]
axes.set_yticks(yticks)
axes.set_yticklabels(["$%.2f$" % y for y in yticks]);

xfmt = mdates.DateFormatter('%Y-%m-%d')
axes.xaxis.set_major_formatter(xfmt)
axes.set_xticks(dates)
plt.xticks(rotation=25)
plt.show()

产量

enter image description here


0
投票

无痛解决方案。并发症最小。

fig, ax = plt.subplots()

# load data, ensure 'date' column is a `datetime` object
df = pandas.read_csv(f'data.csv')
df['date'] = pandas.to_datetime(df['date'])

ax.plot(df['date'], df['y_values'])

# every 7 days
ax.set_xticks(df['date'][::7])
ax.set_xticklabels(labels=df['date'][::7].dt.strftime('%Y-%m-%d'), rotation=25)

如果有人知道为什么我们需要函数调用

set_xticks
set_xticklabels
,请告诉我。好像有点奇怪。

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