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的使用的更多相关文章

  1. python安装numpy、scipy和matplotlib等whl包的方法

    最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...

  2. matplotlib 高级用法实例--共享x轴

    http://localhost:8888/notebooks/duanqs/matplotlib_advanced_example.ipynb 我不会弄呀, 刚才从matplotlib文档里吧示例用 ...

  3. Python matplotlib笔记

    可视化的工具有很多,如Tableau,各种JS框架,我个人感觉应该是学JS最好,因为JS不需要环境,每个电脑都有浏览器,而像matplotlib需要Python这样的开发环境,还是比较麻烦的,但是毕竟 ...

  4. Matplotlib——第一章轻松画个图

    首先安装matplotlib,使用pip install matplotlib.安装完成后在python的命令行敲入import matplotlib,如果没问题,说明安装成功可以开始画图了. 看好了 ...

  5. win7系统下python安装numpy,matplotlib,scipy和scikit-learn

    1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...

  6. 【转】使用Python matplotlib绘制股票走势图

    转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...

  7. 【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用

    最近获得了一些四级成绩数据,大概500多个,于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢?说干就干,于是有了这篇文章.文章顺带介绍了xlrd模块的一些用法和matplotlib画自定义 ...

  8. 【Matplotlib】详解图像各个部分

    首先一幅Matplotlib的图像组成部分介绍. 在matplotlib中,整个图像为一个Figure对象.在Figure对象中可以包含一个或者多个Axes对象.每个Axes(ax)对象都是一个拥有自 ...

  9. Matplotlib 学习笔记

    注:该文是上了开智学堂数据科学基础班的课后做的笔记,主讲人是肖凯老师. 数据绘图 数据可视化的原则 为什么要做数据可视化? 为什么要做数据可视化?因为可视化后获取信息的效率高.为什么可视化后获取信息的 ...

  10. python 下 tinker、matplotlib 混合编程示例一个

    该例是实现了 Tinker 嵌入 matplotlib 所绘制的蜡烛图(k 线),数据是从 csv 读入的.花一下午做的,还很粗糙,仅供参考.python 代码如下: import matplotli ...

随机推荐

  1. Windows Server 2012R2 DHCP服务介绍及搭建 转载

    转载链接:https://blog.csdn.net/KamRoseLee/article/details/79251830   一.什么是DHCP DHCP(DynamicHost Configur ...

  2. 腾讯视频缓存 tdl 转 mp4

    找到腾讯视频->设置,看下缓存文件的目录地址,然后cmd,通过命令进行转化.  copy/b *.tdl 1.mp4

  3. 在vue中使用基于d3为基础的dagre-d3.js搞定一个流程图组件

    项目中想搞定一个流程图,开始使用了阿里的G6,但是G6目前不支持手势,这样就很郁闷了,因为公司的领导都是使用iPad看的,你不支持手势是不行的,后来又想到了百度的echarts,试了试,感觉还不错,手 ...

  4. 鲲鹏云实验-Python+Jupyter机器学习基础环境

    [摘要] 介绍Ubuntu 18.04环境下Python3常用科学计算和数据分析包(numpy, scipy, matplotlib, sklearn, pandas)的安装,以及Jupyter No ...

  5. gitbook 入门教程之增强版 edit-link-plus 编辑此页插件

    Gitbook plugin add "edit this page" link, and intelligent recognition to Github or Gitlab ...

  6. Python之HTTP静态服务器-面向对象版开发

    利用面向对象的思想完成HTTP静态Web服务器的开发. 主要思路如下: 1.抽象出一个服务器类 1.1 编写类的对象属性 1.2 编写类的方法 注意: 在进行请求资源路径判断时,需要确认请求路径中是否 ...

  7. mac 命令记录

    1. 安装 mysqlworkbench brew search mysql brew tap caskroom/cask brew cask search mysql brew cask insta ...

  8. Node升级——Node Binary管理模块"n"

    Node.js的开发非常活跃,它的最新稳定版本也频繁变化,你不时会发现,一个模块不能在你当前的Node版本上使用,此时你需要升级Node 幸运的是,可以用一种非常简单的方法来管理你的Node版本,即使 ...

  9. 2018 ACM-ICPC南京区域赛题解

    解题过程 开场开A,A题shl看错题意,被制止.然后开始手推A,此时byf看错E题题意,开始上机.推出A的规律后,shl看了E题,发现题意读错.写完A题,忘记判断N=0的情况,WA+1.过了A后,sh ...

  10. windows程序设计01_utf8编码问题

    坚持与妥协 从学程序的第一天老师就给我们说源代码应该使用utf8保存.因为先入为主,"源代码应该使用utf8"的观念已经在"学院派"出身的程序员脑子里根深蒂固. ...