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
相关产品推荐
相关产品推荐

