一、简介
matplotlib库是专门用来开发2D图表(3D也可以画),运用非常广泛,因为它具有以下优点:
- 使用简单
- 以渐进式、交互式方式实现数据可视化
- 表达式和文本使用LaTeX排版
- 对图像元素控制力强
- 可输出PNG/PDF/SVG和EPS等多种格式
本文旨在让没有用过matplotlib的朋友通过一篇文章能够上手matplotlib,因此力求用词简单,结构清晰,只介绍最基本常用的功能,更多功能根据实际需求再搜索。
参考书籍:
Python数据分析实战( by Fabio Nelli)
Python数据分析(by Armando Fandango)
利用Python进行数据分析(by Wes McKinney )
二、绘图步骤
1.先画个简单的图吧
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y, 'ro')
plt.show()
- 实参x传入横坐标值,实参y传入纵坐标值,第三个参数缺少时默认为线形图。
- ‘r’表示红色,‘o’表示用圆圈表示每个值,如果需要红色的线形图时,可以传入’r’。
- 颜色编码还有:b=蓝色,g=绿色,r=红色,y=黄色,k=黑色,w=白色,c=蓝绿色,m=洋红
- 形状编码还有:
'^', '*', 'o',‘--’,‘-.’
2.添加图象的基本元素
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y, 'ro')
#定义x轴范围,y轴范围
plt.axis([0, 5, 0, 20])
#为图表增加标题,并定义字体样式
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
#增加x轴和y轴标签,并将字体颜色设为灰色
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values', color='gray')
#增加网格线背景
plt.grid(True)
#增加图例,图例位置可用loc参数设定
plt.legend(['Fiest series'])
plt.show()
- fontsize设置字体大小,默认12,可选参数 [‘xx-small’,‘x-small’,‘small’,‘medium’,‘large’,‘x-large’,‘xx-large’]
- 更多关于标题参数的设置可以参考这篇博客:https://blog.youkuaiyun.com/helunqu2017/article/details/78659490
3.绘图进阶功能
1)在图中任意位置插入文本
plt.text(1, 1.5, 'First')
plt.text(1.1, 12, r'$y = x^2$', fontsize=20, bbox={'facecolor':'yellow', 'alpha':0.2})
- plt.text()中前两个形参需要传入文字的x,y坐标值
- 第二行代码中
r'$y = x^2$'
是LaTex数学表达式,r表示对后面引号中的内容不进行转义,然后将公式包含在两个$中。更多内容点击查看官方文档 - 更多关于text文本的参数可以参考这篇博客:https://blog.youkuaiyun.com/helunqu2017/article/details/78659490
2)将多张图象绘制在一张图片中
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)
y1 = np.sin(np.pi*x)
y2 = np.sin(2*np.pi*x)
plt.subplot(2, 1, 1) #与plt.sublot(211)等效
plt.plot(x, y1, 'b-.')
plt.subplot(2, 1, 2)
plt.plot(x, y2, 'r--')
plt.show()
- plt.subplot()传入三个整数参数,第一个数字决定图形沿垂直方向分为几部分,第二个数字决定图形沿水平方向分成几部分,第三个数字设定接下来的命令所控制的图片
- 注意要在所有子图片都绘制完再plt.show()
- 改变sublot()函数中的参数可以把图形分成左右两个,上下左右四个等
4)增加多个图例
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [2,4,6,8], 'g^')
plt.plot([1,2,3,4], [3,6,9,12], 'b*')
plt.legend(['first series', 'second series'], loc=2)
plt.show()
- plt.legend()传入的列表中元素必须会自动匹配调用plot()函数的顺序
- loc参数可以控制图例位置,取值范围为0-10,每个数字代表图表中一处位置,默认为1。如0=最佳位置,1=右上角,2=左上角,3=左下角,4=右下角,8=上方水平居中
3)将图表保存为图片
plt.savefig('my_chart.png')
- 保存路径为当前.py文件所在目录
三、更多图形实例
可以参考一下这篇博客
https://blog.youkuaiyun.com/qq_34337272/article/details/79555544