利用 Matplotlib 绘制数据图形(二)

利用 Matplotlib 绘制数据图形(一)python

了解了 Matplotlib 的基本知识以后,咱们就能够开始上手试试画图了。api

先从最多见的图形开始:折线图、条形图、柱状图、散点图、圆形图。微信

我不得不说本 Part 实际上都是没有什么逻辑的语法规定,会比较无聊。不过这一 Part 又最有用,由于看完以后用 Matplotlib 绘图就没什么问题了(若是你对图形细节没什么要求的话~)函数

用于绘图的数据

由于最近搞了个预测招商银行股价的比赛,部分绘图就直接用这个数据了。post

import tushare as ts
pro = ts.pro_api('***********************')# *** 为注册 tushare 后分配的 token
cmb = pro.daily(ts_code='600036.SH', start_date='20190301', end_date='20190510')

动手以前,还得再多说一点

在利用 Matplotlib 绘制数据图形(一)中我写过:若是你想用 Matplotlib 绘图,须要建立至少一个 fig 且其中包含一个 axes。spa

fig,ax_1 = plt.subplots()

可是咱们又常见下面的写法:3d

没有手动建立 fig 和 axes 怎么也出图了呢?
答案是:若是调用了 plt 的绘图方法,可是 plt 却没有追踪到 fig 和/或 axes ,plt 会默认建立新的 fig 和/或 axes(Matplotlib 的两套 API)。code

plt 追踪 fig 和 axes 的过程对用户是隐形的,咱们只须要知道每次调用 plt 绘图方法,该绘图效果都会呈如今当前 axes 中就能够了(后面会讲如何手动变动 plt 当前 fig 和 axes)orm

OK, Matplotlib

折线图、条形图、柱状图、散点图、圆形图分别对应着 Matplotlib 中的五个绘图函数:plot()、bar()、hist()、scatter()、pie()。blog

plt.plot([x],y) #注意这里的 x 实际上是可选的,但实际使用中仅传入 y 比较少见
plt.scatter(x,y)
plt.bar(x,height) #保持和官方文档一致,使用 height 代替 y
plt.hist(x)
plt.pie(x)

其中 .plot() x 可选的意思是:若是仅传入一个位置参数的话,函数默认用户传入的是 y,x 则默认为序列 [0,1,2,3,4,....]与 y 的数据一一对应。因此以前我绘制的图形仅传入了 'open' 一个变量是没问题的。

不过上面的折线图没有什么意义,折线图实际中用的比较多的是时间序列,由于折线图反应了的是先后有内在联系的变化。

因此不少时候折线图 x 轴是时间,y 轴为数据:

plt.plot('trade_date','open',data = cmb)

不过默认的时间轴大部分状况下是 —— 无法用的(😓)。

Matplotlib 提供了一个专门的模块 mdates 来处理与时间有关的问题。

其中的各类 Locator 专门用来生成时间刻度。
因此时间序列刻度自动很差用的话就手动吧23333。

代码比较简单,直接扔出来,看注释:

import matplotlib.dates as mdates
months = mdates.MonthLocator() # 月 ticker
days = mdates.DayLocator() # 日 ticker
dateFmt = mdates.DateFormatter('%m-%d') 
ax = plt.gca()# 获取当前 axes
datemin = np.datetime64('2019-03-10')# 时间轴最小值
datemax = np.datetime64('2019-05-10') + np.timedelta64(1) # 时间轴最大值
ax.set_xlim(datemin, datemax)# 设置时间轴的区间
ax.xaxis.set_major_locator(months) # 将月 ticker 设置为主刻度
ax.xaxis.set_major_formatter(dateFmt)
ax.xaxis.set_minor_locator(days) # 将日 ticker 设置为小刻度
plt.plot('trade_date','open',data = cmb)
plt.gcf().autofmt_xdate() #获取当前fig 并自动调整tick label
plt.show()

折线图还有一个经常使用的场景是在同一幅图绘制多个不一样变量的变化曲线。这怎么作呢?

plt.plot('trade_date','close',data = cmb)

不切换当前 fig 和 axes ,直接继续绘制就在同一张图里了。

但这种方法也很差,数据多了一行一行加麻烦。好比我想直接在一张图里绘制 'open',‘high','low','close' 四个变量,得加四行。

更好的办法是把这四个变量提取出来:

ohlc = cmb.loc[:,['open','high','low','close']].values
plt.plot(cmb['trade_date'].values,ohlc)

Matplotlib 会自动将 y 中的每一列数据绘制称同一条曲线。

而后你们要求又来了,四个图颜色却是区分了,我怎么知道哪一个颜色表明谁呢?因此要把图例添加上:

plt.gca().legend(['open','high','low','close'])#按照plot y 的数据顺序传入 legend 字符串就行。

至此,一个有实际意义且信息准确的折线图就完工了。

本身用的话到这里就差很少了,若是想制做为报告中可以使用的图,还有不少美化的工做须要进行。

Ad Time

本系列完成后我会在微信公众号数据科学与技术(read_csv) 发布精心制做的渐进式 notebook,但愿你们能关注一下。

相关文章
相关标签/搜索