Matplotlib绘图的一大特色是面向对象绘图。面向对象绘图是指将图形的元素看作一个对象,众多对象具有隶属关系,不同对象拼凑成一个完整的图形。
类比一下生活中用纸笔绘图,我们需要先找到一张白纸,在白纸上绘图。使用Matplotlib面向对象绘图,绘图前我们要先创建一个Figure对象,Figure对象是一个空白区域。Figure对象可以通过pyplot包中的figure函数进行创建。
fig = plt.figure()
# 创建两个Axes对象
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
# 假设Open和Close为定义过的开盘价和收盘价的Series对象。
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
ax1.plot(Close[-10:])
ax2.plot(Open[-10:])
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
ax1.plot(Close[-10:])
ax2.plot(Open[-10:])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文设置
ax1.set_title('近十个交易日收盘价') # 设置标题
ax1.set_xlabel('日期') # 设置X坐标轴标签
ax1.set_xticklabels(Close.index[-10:], rotation=25) # 设置刻度字体旋转角度
ax1.set_ylabel('收盘价') # Y坐标轴标签
ax1.set_ylim(27,35) # Y坐标轴取值范围
ax2.set_title('近十个交易日开盘价')
ax2.set_xlabel('日期')
ax2.set_xticklabels(Close.index[-10:], rotation=25)
ax2.set_ylabel('开盘价')
ax2.set_ylim(27,32)
ax1=plt.subplot(221)
ax1.set_title('ax1')
ax2=plt.subplot(222)
ax2.set_title('ax2')
ax3=plt.subplot(223)
ax3.set_title('ax3')
ax4=plt.subplot(224)
ax4.set_title('ax4')
参数“221”中的“22”表示子图排列为2×2形式(2行2列),“1”表示第一个子图,默认次序为,先从第一行从左到右,再逐行向循环下计序。具体如图所示:
接下来,绘制北方华创(002371.SZ)股票2020年收盘价曲线图和成交量柱状图。若当日收盘价大于等于开盘价,则成交量柱状图棒的颜色为红色;若当日收盘价低于开盘价,则成交量棒为绿色。
# 导入相关的库
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
# 设置token,即接口密匙, 获取方式及相关权限详情见Tushare官网。
token = 'Your token'
pro = ts.pro_api(token)
# 获取日行情的接口。
df = pro.daily(ts_code='002371.SZ')
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index(['trade_date'], inplace=True)
# 倒序,因为Tushare的数据最近日期默认显示在DataFrame上方位置。倒序方便后作图。
df = df.sort_index()
# 取2020年的数据
Close = df.close['2020']
Open = df.open['2020']
Vol = df.vol['2020']
绘图:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文设置
ax1 = plt.subplot(211) #2行1列
ax1.plot(Close,color='k')
ax1.set_ylabel('收盘价')
ax1.set_title('北方华创2020年收盘价曲线图')
ax2 = plt.subplot(212)
left1 = Vol.index[Close>=Open]
hight1 = Vol[left1]
ax2.bar(left1, hight1, color='r')
left2 = Vol.index[Close
# 提取出最高价和最低价
High = df.high['2020']
Low = df.low['2020']
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文设置
# 创建Axes对象
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
# 绘制四条曲线
ax.plot(Open, '--*', label='开盘价')
ax.plot(High, '-+', label='最高价')
ax.plot(Low, '-.>', label='最低价')
ax.plot(Close,label='收盘价')
# 在axes对象中增加文本对象
ax.set_title('北方华创2020年价格图')
ax.set_ylabel('价格')
ax.legend(loc='best')