Matplotlib是一个非常经典的绘图库,甚至有人将numpy+pandas+matplotlib
称之为数据分析三剑客,足以说明这个库的重要性。虽然Peter钟情于Plotly,但掌握Matplotlib绘制技巧也非常重要。
基于Matplotlib的绘图技巧太多了,想深入学习的小伙伴建议直接官网:https://matplotlib.org/。
从本文中你将学习到以下下面几点:
- 基本图形绘制:折线图、柱状图、直方图、双轴线图等
- 绘制小技巧:添加图例、标题、注释、颜色等
- 实战:股票趋势图和K线图制作
导入库
一般绘图的时候需要导入常见的库;在使用matplotlib绘制的时候还需要解决中文的问题
1 | import pandas as pd |
折线图
1 | x = [2,3,4] |
多折线图
1 | # 默认参数 |
柱状图
1 | x = [2,3,4,5,6] |
散点图
1 | x = np.random.rand(20) # 0-1之间的20个随机数 |
直方图
1 | # 随机生成1000个服从正态分布的数据,均值为0,标准差为1 |
频率直方图
主要是y轴发生了变化,全部是小数表示的
1 | data = np.random.randn(1000) |
绘图技巧
技巧1:设置大小
1 | x = [2,3,4] |
添加文字说明
文字说明包含标题、轴标签等
1 | x = [2,3,4] |
修改线条样式
1 | import numpy as np |
添加注释
1 | plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 |
添加图例
1 | # 第一条 |
调整颜色
1 | import numpy as np |
设置双轴
1 | # 1 |
旋转轴刻度
当某个轴的刻度值过长的时候,我们可以通过旋转的方式进行显示
1 | x = ["Monday","Thursday","Wednesday"] |
绘制多图-方法1
1 | import matplotlib.pyplot as plt |
绘制多图-方法2
subplots函数主要是两个参数:nrows表示行数,ncols表示列数;同时设置大小figsize。
函数返回的是画布fig和子图合集axes
1 | fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(10,6)) |
实战:绘制股票趋势图
我们从Tushare官网来获取股票的数据,首先安装:
1 | pip install tushare |
获取数据
1 | import tushare as ts |
为了方便后续的绘图,需要将日期date字段改成索引:
1 | # 将日期设置成索引 |
默认绘图
我们使用收盘价close来绘制默认的图形
1 | fig = df1["close"].plot() |
添加标题
1 | # Pandas直接绘图 |
上面是使用Pandas内置的折线图方法来绘制,下面使用Matplobtlib来绘制:
1 | # 使用Matplotlib绘图 |
实战进阶:绘制K线图
首先,我们了解一点基本的股票知识:股市的涨跌对K线图的影响
安装库
为了绘制k线图,我们需要安装一个库:
1 | #安装库mpl_finance |
获取代码
1 | df = ts.get_k_data("000001",start="2020-09-08",end="2021-03-08") |
- date:日期
- open:开盘价
- close:收盘价
- high:最高价
- low:最低价
- volume:成交量
- code:股票代码
日期格式转化
定义一个将字符串形式的日期转成数字型的函数:
1 | from matplotlib.pylab import date2num |
下面进行的操作是取出上面数据中的values部分并转成numpy;同时调用上面的函数:
1 | # DataFrame转成numpy数组格式 |
绘制K线图
1 | fig, ax = plt.subplots(figsize=(15,6)) |
添加均线
下面的代码是添加5日和20日的均线数据:
绘制均线图
1 | fig, ax = plt.subplots(figsize=(15,6)) |
添加成交量
我们将K线图放在第一个子图位置,将成交量放在第二个位置即可:
1 | #用来正常显示中文标签 |