You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib修改X轴日期范围问题:自定义时间区间无法占满绘图区

解决Matplotlib中自定义X轴日期范围并让指定区间占满绘图区域的问题

你的问题出在直接用字符串格式的日期传给plt.xlim()——Matplotlib无法直接将纯字符串与pandas的datetime64类型索引匹配,导致轴范围没有被正确设置,自然无法让目标区间占满整个绘图区域。

修复方案

你需要把日期字符串转换成明确的datetime对象,让Matplotlib能准确识别并缩放轴范围。这里有两种简单的实现方式:

方式1:使用pandas的pd.to_datetime()解析日期

直接把字符串日期转换成pandas可识别的datetime格式:

plt.xlim(pd.to_datetime('2016-05'), pd.to_datetime('2017-05'))

方式2:使用Python内置的datetime模块

如果习惯用原生datetime对象,也可以这样写:

from datetime import datetime
plt.xlim(datetime(2016, 5, 1), datetime(2017, 5, 1))

完整可复现代码

把修改后的代码整合进去,效果如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from pandas_datareader import data as pdr
import yfinance as yf

df = pdr.get_data_yahoo('ETH-USD', interval='1d', period="5y")

plt.figure(figsize=(24,10), dpi=140)
plt.grid()
df['Close'].plot()
df['Close'].ewm(span=50).mean().plot(c='#4d00ff')
df['Close'].ewm(span=100).mean().plot(c='#9001f0')
df['Close'].ewm(span=200).mean().plot(c='#d102e8')
df['Close'].ewm(span=300).mean().plot(c='#f101c2')
df['Close'].rolling(window=200).mean().plot(c='#e80030')

plt.title('ETH-USD PLOT', fontsize=25, ha='center')
plt.legend(['C L O S E', 'EMA 50','EMA 100','EMA 200','EMA 300','MA 200'])
# 替换后的x轴范围设置
plt.xlim(pd.to_datetime('2016-05'), pd.to_datetime('2017-05'))

plt.show()

运行这段代码后,2016年5月到2017年5月的区间就会自动拉伸,填满整个绘图区域,方便你查看这段时间的细节走势。

内容的提问来源于stack exchange,提问作者HarriS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:32:46