前面我们学习了Matplotlib的绘图流程和常用设置以及常见统计图的绘制方法。
同时,我们也发现Matplotlib绘制出的图形中会存在一些问题,例如:如何绘制双Y轴坐标系?如何去掉图形默认的边框?以及如何移动坐标到指定位置?
一、绘制双Y轴坐标系
在进行数据分析时,有时候我们需要在同一个坐标图中比较两种数据在时间序列上的关系。
由于两种数据的单位和数据并不统一,也是不同的类型的数据,因此我们不能用一个Y轴来共同衡量两类不同的数据,这时候我们就需要绘制双Y轴图。
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
# 设置全局字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
datas = pd.read_excel(r'C:\Users\lin-a\Desktop\data\600001SH.xlsx')
# 将日期转换为时间戳,并设置为行索引
datas.index=pd.to_datetime(datas['日期'])
# 获取二月份的数据
feb_datas = datas['2015-02']
# 绘制图形
fig = plt.figure(figsize=(20,8),dpi=80)
ax = fig.add_subplot(111)
x = feb_datas.index.tolist()
# 将时间转换为字符串
x2 = [time.strftime('%Y-%m-%d') for time in x]
lin1 = ax.plot(x2,feb_datas['收盘价(元)'].values.tolist(),label='收盘价',color='red')
ax.legend(loc='upper left')
ax.set_ylabel("收盘价(元)")
ax.set_xlabel("日期")
plt.show()
以上的代码中:有add_subplot(),这个与plot()有什么异同呢?
-
plot是绘图,subplot是子图,整体不偏离这个框架。
-
fig.add_subplot(111)
此处,fig= plt.figure()是一个对象。其中参数111,指的是将图像分成1行1列,此子图占据从左到右从上到下的1位置。
-
plt.subplot(234)
将画布分成2行3列,取从左到右,从上到下第4个位置。
两者本质是一样的,不同在于add_subplot是面向对象,subplot是面向函数
我们的目的是研究二月份某公司的每日收盘价以及对应的成交量,所以为方便分析,需要在一个双Y轴坐标图中同时绘制出收盘价和成交量的时间序列图。
双y轴绘制的关键函数是twinx(),twinx()函数表示共享X轴,共享表示的是X轴使用同一刻度线。
每日收盘价的折线图,我们已经绘制出来了,现在要使用twinx()绘制另外一条成交量折线图:
%matplotlib inline
from matplotlib import pyplot as plt
import pandas as pd
# 设置全局字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 导入数据
data = pd.read_excel(r'C:\Users\lin-a\Desktop\data\600001SH.xlsx')
# 查看数据的基本特征
print(data.shape)
# 将日期设置为数据的索引,便于使用日期选择数据
data.index = data['日期']
# 获取2月的数据
feb_data = data['2015-02']
# 获取x,y轴的数据
y = feb_data['收盘价(元)'].values.tolist()
y2 = feb_data['成交量(股)'].values.tolist()
x = feb_data.index.strftime('%Y-%m-%d').tolist()
# 设置画布大小
fig = plt.figure(figsize=(20,8),dpi=80)
# 设置ax对象
ax = fig.add_subplot(111)
ax2 = ax.twinx()
# 设置标题
plt.