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

如何在Matplotlib中对比特币数据集日期排序并仅显示年月X轴?

比特币数据集日期排序优化与图表日期格式调整

问题现状

当前代码运行后存在两个问题:

  • 日期列未被解析为datetime类型,导致排序按字符串顺序而非时间顺序,出现日期乱序
  • 图表X轴显示全部日期,未按「月份+年份」格式展示

当前图表效果:
当前图表效果

数据示例格式:
数据示例

解决方案

步骤1:正确解析日期并完成时间排序

先将Date列转换为datetime类型,再设置为索引并排序,确保时间顺序正确:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

# 处理日期列:转换为datetime类型,format需匹配你的数据日期格式
Bitcoin_Historical['Date'] = pd.to_datetime(Bitcoin_Historical['Date'], format='%m/%d/%Y')

train1 = Bitcoin_Historical[['Date','Price']]
# 转换Price为数值类型
train1['Price'] = pd.to_numeric(train1['Price'].astype(str).str.replace(',', ''), errors='coerce')
# 设置日期为索引并排序
train2 = train1.set_index('Date').sort_index()

步骤2:调整图表X轴日期显示格式

使用DateFormatter设置仅显示月份名称+年份,并调整X轴刻度避免重叠:

plt.figure(figsize=(15, 5))
plt.plot(train2['Price'])

# 设置X轴日期格式:完整月份名称+年份(如January 2020)
date_form = DateFormatter("%B %Y")
plt.gca().xaxis.set_major_formatter(date_form)

# 配置每月显示一个刻度,可根据数据量调整interval值
from matplotlib.dates import MonthLocator
plt.gca().xaxis.set_major_locator(MonthLocator(interval=1))

# 旋转日期标签,避免重叠
plt.gcf().autofmt_xdate()

plt.xlabel('Date', fontsize=12)
plt.ylabel('Price', fontsize=12)
plt.title("Closing price distribution of bitcoin", fontsize=15)
plt.show()

完整修改代码

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, MonthLocator

# 处理日期列
Bitcoin_Historical['Date'] = pd.to_datetime(Bitcoin_Historical['Date'], format='%m/%d/%Y')
train1 = Bitcoin_Historical[['Date','Price']]

# 转换Price为数值类型
train1['Price'] = pd.to_numeric(train1['Price'].astype(str).str.replace(',', ''), errors='coerce')

# 设置日期索引并排序
train2 = train1.set_index('Date').sort_index()

# 绘制图表
plt.figure(figsize=(15, 5))
plt.plot(train2['Price'])

# 配置X轴日期格式
date_form = DateFormatter("%B %Y")
plt.gca().xaxis.set_major_formatter(date_form)
plt.gca().xaxis.set_major_locator(MonthLocator(interval=1))
plt.gcf().autofmt_xdate()

plt.xlabel('Date', fontsize=12)
plt.ylabel('Price', fontsize=12)
plt.title("Closing price distribution of bitcoin", fontsize=15)
plt.show()

关键说明

  • pd.to_datetime的format参数需匹配你的数据日期格式,示例为MM/DD/YYYY(对应%m/%d/%Y),若为其他格式需对应修改(如%d/%m/%Y表示日/月/年)
  • 若要显示缩写月份(如Jan 2020),可将DateFormatter的参数改为"%b %Y"
  • MonthLocator(interval=1)设置每月显示一个刻度,数据量较大时可调整interval为2或更大值,减少刻度数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:19