需要注意的是plot_date默认的linestyle是‘ ’, 也就是空, 不改变这个参数的话我们绘制出来的图形看上去就像散点图, 将linestyle这个参数设置成实线后:
image.png
我们使用gca 和 gcf 方法 分别获取plt对象当前的 轴线(axes)和 特征(figure), 然后可以通过这两个对象分贝设置我们需要绘制的图象的某些特征。
自定义横轴日期格式:
image.png
自动格式化横轴显示的格式:
image.png image.png
源码:
# coding=utf-8
import pandas as pd
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
from matplotlib import dates as mpl_dates
# 使用seaborn风格
plt.style.use('seaborn')
'''
# 创建datetime对象列表, 用来表示点在横轴上的位置和标签
dates = [
datetime(2019, 5, 24),
datetime(2019, 5, 25),
datetime(2019, 5, 26),
datetime(2019, 5, 27),
datetime(2019, 5, 28),
datetime(2019, 5, 29),
datetime(2019, 5, 30)
]
# 表示竖轴上的位置和标签, 数量必须和横轴上的日期数量对应上
y = [0, 1, 3, 4, 6, 5, 7]
# 默认的linestyle是无, 也就是所有的点看上去像散点, 我们手动设置成实线
plt.plot_date(dates, y, linestyle='-')
'''
# 利用pandas快速读取数据集csv中的所有数据
data = pd.read_csv('./data_5.csv')
# 取出数据集中所有列名为Date的数据, 并将其格式转化成标准的datetime格式:XXXX-XX-XX
data['Date'] = pd.to_datetime(data['Date'])
# 根据数据集的Date列对所有数据进行原地的排序(inplace=True并且排序的key是Date列的数据 默认是从小到大)
data.sort_values('Date', inplace=True)
# 取出排序后的所有日期和每日的价格指标
price_date = data['Date']
price_close = data['Close']
# 利用plot_date绘制时序图,横坐标是每日的时间,纵坐标是每日的价格,点与点之间通过实线连接
plt.plot_date(price_date, price_close, linestyle='solid')
# plt对象的gcf方法全称: get current figure: 获得当前plt对象所绘制图形的所有特征, 并且可以利用这个对象来改变某些特征
# 这里我们进行的改变是使得横轴的日期能够自动格式化(更美观): fmt: format(格式化)
plt.gcf().autofmt_xdate()
# 如果我们想使用其他风格的格式化时间, 我们可以使用matplotlib包下面的dates模块(有一点复杂)
# mpl_dates模块下的DateFormatter类接受实例化参数是一个datetime 格式化字符串, 在这里简单说下: %b 表示月份, %d表示日期, %Y表示年份
date_format = mpl_dates.DateFormatter('%b, %d %Y')
# plt对象的gca方法: get current axes(其实也就是获取当前正在绘制的图形的实例[因为一个figure可以绘制多个实例]),\
# 我们将当前axes对象的横轴(x- axis[轴])改变风格, 传进去的参数是前面获取的格式化日期, 即可.
plt.gca().xaxis.set_major_formatter(date_format)
plt.title('First time series')
plt.xlabel('Date')
plt.ylabel('Price')
plt.tight_layout()
plt.show()
结果:
image.png
网友评论