python绘图库有很多,底层的就是matplotlib,另外还有基于matplotlib的更方便,代码可读性更强的库,比如seaborn、plotnine等。各个库之间的对比:

  https://www.zhihu.com/question/39684179

  下面对各种绘图库的函数做个备忘。

seaborn

matplotlib

  在python下一般使用matplotlib包下的pyplot,所以在import的时候:

  一般import matplotlib.pyplot as plt方便使用它的绘图函数。

通用函数

show()

  显示绘图窗口,把画的图显示在窗口中。

subplot()

  用于添加子图像,参数有三个,分别是子图像的行、列、索引。可以这样使用:

  subplot(numbRow, numbCol, plotNum)

  subplot(numbRow numbCol plotNum)

  前一种是一般的用逗号隔开,明确三个参数。后一种是三个整数参数直接合成一个整数传入,这要求这个整数只能是3位的,这样才能唯一确定用户传入的参数。(比如223,就是把图像划分成2*2的格子,添加一个子图像在第三个格子里)

  子图像是一个一个加进去的,所以我们会问,如果前一个子图像把后一个挡住了怎么办?或者前后的子图像的行列数不同怎么办?对于挡住的情况,代码按顺序加入子图,后一张子图直接就把挡住的前一张完全去掉了,不管把前一张挡住多少。例如,先加入1行1列索引为1的子图,就是占满绘图窗口,然后2,2,3,接着3,3,2。可以看到1,1,1的子图被后面的挡住完全去掉了:

  使用时机:在使用别的函数来画子图之前,先用一下这个函数,给python声明一下,我下一幅子图要画在哪里。而不是画完以后再用这个函数,那就贴了一张空的子图进去了,画的那一张在这张空子图的下面可能会被盖住。

二维图像

contourf()和contour()

  一般用来画等高线图。这两个函数就差一个字母,除了画出来得图有些差别,用法一样,区别如下(一个填充等高线之间的空间一个不填充):

  使用方法如下:

  plt.contourf(X, Y, Z, levels=10, alpha=0.5, cmap='jet')

  X是生成网格的X坐标数组(二维数组array,或者matrix),Y是和X相同类型的Y坐标,Z是对应网格的每个格点的函数值数组(也是二维数组array,或者matrix),网格的生成是使用numpy库中的meshgrid()函数。levels是图像中等高线的数量,我这里设置为10。alpha是图像的透明度,介于0~1,我这里设置为0.5半透明。可以设置透明度有个好处就是可以把很多图画在同一个画布上,方便比较。cmap是图像的颜色类型,有很多预设的颜色类型,我这里用一个叫‘jet’的颜色类型,当然也可以自己定义,具体设置网上再找吧。后三项有预设值,可以省略。

  以下是效果图(我使用的函数是Z = X^2 + Y^2):

  看起来不是很圆润,这是因为我的网格规模就是7*7的,它画图就按照你的网格数量来画,所以有棱有角的。有一点奇怪的就是,网格是有限的,它是怎么画出这么多的等高线的?我猜它应该是线性插值插进去的。反正也就一个图用来看的,不用特别准确。但是如果要准确怎么办?那就把网格设置地密一些!别让等高线的密度比网格的密度大太多就好了。

clabel()

  这个函数用来标注等高线图的数值。

  plt.clabel(C, inline=False, fontsize=12)

  C代表刚刚画的图(在用contour()等函数画完以后传给C,C = contour(...)),inline是否画在线内,fontsize后面表示数字的大小。

plot()

  用来画二维面上的点、线。当然也可以在三维的空间里面画,就画在三维坐标系的xOy面上。具体用法:

  plt.plot(x, y,  ls="-", lw=2, label="plot figure", color='black',alpha=0.5...)

  x: 要画的线的各个点在x轴上的坐标(一维数组)

  y: 要画的线的各个点在y轴上的坐标(一维数组,并且规模要和x轴的数组一致)

  ls:折线图的线条风格,这里是一个减号

  lw:折线图的线条宽度

  label:标记图内容的标签文本

  color:颜色

  alpha:透明度

  还有很多的参数可以调节,不一一列举,看链接:

  https://blog.csdn.net/dss_dssssd/article/details/82810630

  另外,和它一样,很多其它画线的函数也都支持一些个性化的参数(比如color、alpha、width等等),参数汇总看链接:

  https://blog.csdn.net/qq_34940959/article/details/78488208

三维图像

  三维图像需要从matplotlib的mpl_toolkits包中导入mplot3d:

  from mpl_toolkits import mplot3d

axes()

  ax = plt.axes(projection='3d')

  定义坐标系的维度,这里直接定义为三维并把图像引用传出来,可能还有别的参数,以后再加入。

plot_surface()

  ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap='jet')

  上面用axe()定义的坐标系ax中画三维的曲面图,并且带有梯度颜色。

  X、Y、Z就是每个网格点在对应坐标轴的值,cmap是颜色设置,如前面的contourf()。

  rstride 是在行上每几个网格点计算一次梯度来图上对应梯度的颜色。cstride 就是列上的。它们越大,画梯度颜色的“补丁”也越大,对应地,“补丁”的数量也越少。如下图,一个是1,一个是2,“补丁”就一个是20,一个是10。

numpy

  import的时候为了方便,取名为np:import numpy as np

linspace()

  linspace(a, b, n),传回一个在a、b之间的插值列表(包括a、b),插值的数量是n。这个差值列表类型是array,而不是list,array里的数据类型是固定的,都是float。而列表list里面则并不是固定的,里面可以存任何东西。array是numpy下定义的一个类型,这个类型类似C++的数组,随机查找很快。所以处理大批量同类数据的时候,最好使用array类型。

  具体使用和其他参数:

  https://www.cnblogs.com/antflow/p/7220798.html

meshgrid()

  用于生成对应列表的网格(网格也是用列表存,二维网格是对每一维来说是二维列表,三维网格对每一维来说是三维列表),用于绘制梯度图等。使用方法如下:

  1. [X, Y] = meshgrid(x,y)或者python还支持X,Y = meshgrid(x,y),不加方括号也行,当然直接A = meshgrid(x,y),传给一个值也行,就是后面不太好处理。

  2. [X, Y] = meshgrid(x)与[X, Y] = meshgrid(x, x)是等同的

  3. [X, Y, Z] = meshgrid(x, y, z)生成三维的网格

  生成的网格索引顺序在二维X、Y中是先Y再X,三维X、Y、Z中顺序是Y、X、Z。例如,在三维网格中,如果要获得x[2],y[7],z[3]位置的Y轴坐标,就是Y[7][2][3]。在二维网格中,如果要获得x[2],y[7]位置的X轴坐标,就是X[7][2]。

  下图显示8*3的网格的X的列表:

zeros()

  生成全0的数组,传入数组的规模,一般用来初始化。如:

  Z = zeros([4,5,6])

  赋值给Z一个规模分别是4、5、6的三维全0数组。

特定图像样例

  https://www.runoob.com/w3cnote/matplotlib-tutorial.html

  https://blog.csdn.net/jasonzhoujx/article/details/81780774

Python 绘图的更多相关文章

  1. python绘图:matplotlib和pandas的应用

    在进行数据分析时,绘图是必不可少的模式探索方式.用Python进行数据分析时,matplotlib和pandas是最常用到的两个库.1.matplotlib库的应用准备工作如下:打开ipython,输 ...

  2. Python绘图工具Plotly的简单使用

    1.Plotly被称为史上最好的绘图工具之一,为了更好的展示金融数据的复杂性. Plotly的官方网站为:https://plot.ly/ python量化的关键是金融数据可视化,无论是传统的K线图, ...

  3. 【python笔记】使用matplotlib,pylab进行python绘图

    一提到python绘图,matplotlib是不得不提的python最著名的绘图库,它里面包含了类似matlab的一整套绘图的API.因此,作为想要学习python绘图的童鞋们就得在自己的python ...

  4. python绘图之seaborn 笔记

    前段时间学习了梁斌老师的数据分析(升级版)第三讲<探索性数据分析及数据可视化>,由于之前一直比较忙没有来得及总结,趁今天是周末有点闲暇时间,整理一下笔记: 什么是seaborn Seabo ...

  5. python绘图 matplotlib教程

    mark一个很好的python绘图教程 https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/

  6. python绘图入门

    python绘图入门 学习了:https://zhuanlan.zhihu.com/p/34200452 API:https://matplotlib.org/api/pyplot_api.html ...

  7. Python 绘图 cookbook

    目录 python绘图常见bug matplotlib包加载 解决中文绘图乱码解决方法 解决python中用matplotlib画多幅图时出现图形部分重叠的问题 python绘图常见bug matpl ...

  8. 分形、分形几何、数据可视化、Python绘图

    本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并 ...

  9. python 绘图介绍

    1. python 绘图介绍 2. 函数 import numpy as np import matplotlib.pyplot as plt t = np.arange(0.0, 3.0, 0.01 ...

  10. Python绘图

    1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import mat ...

随机推荐

  1. matplotlib学习(2)

    1.legend的学习(图例)1.1 代码 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) #从-1 ...

  2. ubuntu安装zsh终端

    搬砖博文:https://blog.csdn.net/lxn9492878lbl/article/details/80795413 1.安装zsh sudo apt-get install zsh 2 ...

  3. Java面向对象编程 -2.2

    构造方法与匿名对象 现在的程序在使用类的时候一般都按照了如下的步骤进行: 声明并实例化对象,这个时候实例化对象中的属性并没有任何的数据存在,都是其对于数据类型的默认值 需要通过一系列的setter方法 ...

  4. 电源适配器DC插头规格

    电源适配器 DC 插头的内径外径规格有 (单位为 MM) :2.0*0.72.35*0.72.35*1.12.5*0.73.5*1.13.5*1.354.0*1.75.5*2.15.5*2.54.75 ...

  5. subprocess.run()用法python3.7

    def run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs): "&q ...

  6. 20 个新的且值得关注的 Vue 开源项目

    译者:前端小智作者:Nastassia Ovchinnikova来源:flatlogic.com 个人专栏 ES6 深入浅出已上线,深入ES6 ,通过案例学习掌握 ES6 中新特性一些使用技巧及原理, ...

  7. Hosts工作原理及作用

    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开.其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”.当用户在浏览器中输入一个需要登录的网址时,系统会先检查系自己的Ho ...

  8. 机器学习基础系列--先验概率 后验概率 似然函数 最大似然估计(MLE) 最大后验概率(MAE) 以及贝叶斯公式的理解

    目录 机器学习基础 1. 概率和统计 2. 先验概率(由历史求因) 3. 后验概率(知果求因) 4. 似然函数(由因求果) 5. 有趣的野史--贝叶斯和似然之争-最大似然概率(MLE)-最大后验概率( ...

  9. TensorFlow基础一(Symbolic Operation)

    比较TensorFlow和Numpy 在Numpy中让两个随机矩阵相乘得到运算的结果: import numpy as np x = np.random.normal(size=[10, 10]) y ...

  10. Linux创建智能DNS

    根据客户端源IP地址的不同,DNS服务提供不同的解析地址 1.安装dns服务,修改全局配置文件/etc/named.conf # yum -y install bind # vim /etc/name ...