Matplotlib的使用
1.pyplot基础语法
(1)创建画布
figure()创建一个空白画布,可以指定画布的大小figsize和设置分辨率dpi
plt.figure()
plt.figure(figsize=(8,6),dpi=80) #(8,6)代表图像的长和宽单位是英寸,dpi代表分辨率
(2)创建子图
figure.add_subplot方法用来创建子图,也可以直接使用subplot.
fig=plt.figure()
fig.add_subplot(2,2,1)
或
subplot(2,2,1)
例如:
plt.figure()
x=np.linspace(-np.pi,np.pi,100)
y1=np.sin(x)
y2=np.cos(x)
plt.subplot(211) #表示2x1的画布中的第一个
plt.plot(x,y1,'-r')
plt.title('sin')
plt.subplot(212) #等同 fig.add_subplot(212) 2x1画布中第二个
plt.title('cos')
plt.plot(x,y2,'-.b')
plt.show()

(3)添加画布内容
注意:
对于中文乱码问题,可以在作图之前添加如下代码:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
添加图例一定是在绘图(plot)之后,设置标签等和绘图没有先后顺序,并且图例中的顺序和绘图的顺序一致。
| 函数 | 作用 |
|---|---|
| plt.title | 添加标题 |
| plt.xlabel | 设置x轴的名称 |
| plt.ylabel | 设置y轴的名称 |
| plt.xlim | 设置x轴的范围(参数是上下限的tuple) |
| plt.ylim | 设置y轴的范围 |
| plt.xticks | 设置x轴的刻度数目和取值(参数是list)【其参数rotation代表倾斜角度】 |
| plt.yticks | 设置y轴的刻度数目和取值 |
| plt.legend | 设置图例 |
| plt.grid | 设置网格线 |
示例(应用上面的全部设置):
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
fig=plt.figure()
plt.title('sin&cos')
x=np.linspace(-np.pi,np.pi,100,endpoint=False)
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,'-r') #实线
plt.plot(x,y2,'-.b') #虚线
a=[-np.pi,-1/2*np.pi,0,1/2*np.pi,np.pi]
label=[r'$-\pi$',r'$-\pi/2$',0,r'$\pi/2$',r'$\pi$'] #使用laTex
plt.xticks(a,label) #设置x轴的记号,如果仅有a,则为设置x轴的ticks,其还有个参数rotation代表倾斜角度,如果x轴的刻度标签太长可以设置角度让其倾斜,例如rotation=45,代表倾斜45度
plt.xlim((0,np.pi)) #设置x轴的显示范围[0,pi)
plt.xlabel('x的取值')
plt.ylabel('y的值')
plt.grid(linestyle=':',color='y')#添加背景网格线
plt.legend(['sin','cos'],loc='lower left') #调整图例的位置在左下,注意图例中的sin,与cos对应绘图时的顺序
plt.show()
结果:

(4)保存与显示图形
savefig可以用来保存绘制的图形
show()用来显示图形
plt.savefig('1.png') #可以添加路径
2.散点图与折线图
散点图可以利用scatter函数来绘制,这个是专门绘制散点图的,也可以使用plot函数来绘制。
利用plot直接将关于连接线的部分去掉,加上marker部分就可以了就由折线图变成了散点图,对于上面例子中的:
plt.plot(x,y1,'-r')
将其改为 plt.plot(x,y1,'ro') 就变成了散点图(用o代表点)
也可以通过scatter函数
plt.scatter(x,y1,c='r',marker='o')
结果:

3.3D图与等高线图
对于3D图的绘制需要引入from mpl_toolkits.mplot3d import Axes3D
3D图和2D图的区别就是将x和y进行了meshgrid操作
对于meshgrid函数的作用是将x,y向量 编织成二维的栅格.
例如:
二维坐标系中X轴的取值是1,2,3,而Y轴的取值是4,5,那么可以获得(1,4)(1,5)
(2,4)(2,5)
(3,4)(3,5)这些坐标,这就构成了一个二维的网格,而meshgrid的作用就是这个。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
a=np.array([1,2,3])
b=np.array([4,5])
c,d=np.meshgrid(a,b) #c[[1,2,3],[1,2,3]] d[[4,4,4],[5,5,5]]
e=np.array([[1,2,1],[7,8,9]])
fig=plt.figure()
#在画布上添加3D坐标轴
ax=Axes3D(fig)
#画出3d图:rstride 和 cstride 分别代表 row 和 column 的跨度,一般选择默认就行,不设置。
ax.plot_surface(c,d,e,rstride=1,cstride=1,cmap='rainbow')
ax.scatter(c, d,e, c = 'g', marker = '^') #将点标出来
结果:

我感觉对于3D图的绘制,因为此时x轴和y轴都是二维数组,按照2d中二维数组绘图时,会对以对其进行横向分割的方式,然后去进行连接。对于3d中,首先就是根据横向分割,然后按照构成点的顺序进行连接,然后再根据纵向分割,然后按照构成点的顺序进行连接,这样就连接成了3d图。对于3D图的绘制只需要做的就是构成网格矩阵,然后根据x,y的值去求z的值,这样x,y,z全部有了后就可以对其绘制三维图。
注意:
当x和y是二维数组时,会对以对其进行横向分割的方式,然后去进行连接。
x=np.array([[0,0.5,1],[0,0.5,1],[2,1,4]])
y=np.array([[0,0,0],[1,1,1],[3,3,4]])
plt.plot(x,y,'-rx')
按照(0,0)(0,1)(2,3)连接,然后再(0.5,0)(0.5,1)(1,3)以此类推.
2D的结果:

三维的话就相当于多了个z,设z=np.array([[0,1,2],[1,2,3],[4,5,6]])
那么绘图可以理解为:
按照(0,0,1)(0.5,1,1)(2,3,4)连结,然后再(0.5,0,1)(0.5,1,2)(1,3,5)以此类推,然后再横向(0,0,1)(0.5,0,1)(1,0,2)连接,以此类推。
可以理解成横向分割后连接,然后再纵向分割后连接。
等高线图:
plt.figure()
plt.xlabel(r'$\theta_0$')
plt.ylabel(r'$\theta_1$')
theta0_val=np.linspace(-10,10,100)
theta1_val=np.linspace(-1,4,100)
xs,ys=np.meshgrid(theta0_val,theta1_val)
#使用contour生成三维结构表面的等值线图, np.logspace(-2,3,20)代表z值10^-2到10^3的20元素的等比数列,即那些等高线
CS = plt.contour(xs, ys, J_val, np.logspace(-2,3,20))
#最后加入Label,inline控制是否将Label画在线里面,字体大小为10。
plt.clabel(CS, inline=1, fontsize=10)
# 绘制最优解
plt.plot(theta[0,0], theta[1,0], 'rx', markersize=10, linewidth=2)
#theta[0,0], theta[1,0]为最优解的值
plt.show()
结果:

Matplotlib的使用的更多相关文章
- python安装numpy、scipy和matplotlib等whl包的方法
最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...
- matplotlib 高级用法实例--共享x轴
http://localhost:8888/notebooks/duanqs/matplotlib_advanced_example.ipynb 我不会弄呀, 刚才从matplotlib文档里吧示例用 ...
- Python matplotlib笔记
可视化的工具有很多,如Tableau,各种JS框架,我个人感觉应该是学JS最好,因为JS不需要环境,每个电脑都有浏览器,而像matplotlib需要Python这样的开发环境,还是比较麻烦的,但是毕竟 ...
- Matplotlib——第一章轻松画个图
首先安装matplotlib,使用pip install matplotlib.安装完成后在python的命令行敲入import matplotlib,如果没问题,说明安装成功可以开始画图了. 看好了 ...
- win7系统下python安装numpy,matplotlib,scipy和scikit-learn
1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...
- 【转】使用Python matplotlib绘制股票走势图
转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...
- 【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用
最近获得了一些四级成绩数据,大概500多个,于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢?说干就干,于是有了这篇文章.文章顺带介绍了xlrd模块的一些用法和matplotlib画自定义 ...
- 【Matplotlib】详解图像各个部分
首先一幅Matplotlib的图像组成部分介绍. 在matplotlib中,整个图像为一个Figure对象.在Figure对象中可以包含一个或者多个Axes对象.每个Axes(ax)对象都是一个拥有自 ...
- Matplotlib 学习笔记
注:该文是上了开智学堂数据科学基础班的课后做的笔记,主讲人是肖凯老师. 数据绘图 数据可视化的原则 为什么要做数据可视化? 为什么要做数据可视化?因为可视化后获取信息的效率高.为什么可视化后获取信息的 ...
- python 下 tinker、matplotlib 混合编程示例一个
该例是实现了 Tinker 嵌入 matplotlib 所绘制的蜡烛图(k 线),数据是从 csv 读入的.花一下午做的,还很粗糙,仅供参考.python 代码如下: import matplotli ...
随机推荐
- Java基础IO类之对象流与序列化
对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...
- mybatis的@Options的使用
1.问题: 我采用的是mybatis的注解方式,打算插入一条数据之后返回主键,但是试了好几次都是返回的影响的记录数:1, @Insert(****) @Options(useGeneratedKeys ...
- MySql简单的增删改查语句 js
最近在项目中需要连接数据库,做增删改查的功能,sql语句整理做了以下记录(基于NodeJs,注:data为你的真实数据): (一)新增插入表中数据: sql: 'insert into work(表名 ...
- Spring Data JPA 条件查询的关键字
Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下: And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(Stri ...
- C# 自然周,月,季度计算。
/// <summary> /// 判断时间是否和服务器时间是一天 /// </summary> /// <param name="cs">&l ...
- NSDateFormatter格式详细列表一览
转自:http://www.cnblogs.com/xinus/archive/2012/10/29/NSDateFormatter_samples.html 前言:iOS开发中NSDateForma ...
- I_want_all 2019训练记录
Team members StarHai binarycopycode Fly_White Caution 读题 数组第一维的访问速度比其他维速度快. 清空数组 乘法运算取模里面涉及到减法注意变为负数 ...
- 各种常用js函数实现
1.bind function bind(fn, context) { var args = Array.prototype.slice.call(arguments, 2); retur ...
- 【Visual Studio Code】插件
[Visual Studio Code]插件 转载:https://www.cnblogs.com/yangchongxing/p/10625628.html 目录 ================= ...
- vue响应式数据变化
vue响应式数据变化 话不多说,先上代码: //拷贝一份数组原型,防止修改所有数组类型变量的原型方法 let arrayProto = Array.prototype;// 数组原型上的方法 let ...