科学计算与数据处理ppt课件

上传人:钟*** 文档编号:4478277 上传时间:2020-01-08 格式:PPT 页数:82 大小:2.13MB
返回 下载 相关 举报
科学计算与数据处理ppt课件_第1页
第1页 / 共82页
科学计算与数据处理ppt课件_第2页
第2页 / 共82页
科学计算与数据处理ppt课件_第3页
第3页 / 共82页
点击查看更多>>
资源描述
Matplotlib 绘制精美的图表 1 目录 快速绘图快速绘图绘制多轴图坐标轴设定绘图函数简介对数坐标图极坐标图柱状图散列图 2 目录 图像等值线图三维绘图 3 matplotlib是python最著名的绘图库 它提供了一整套和matlab相似的命令API 十分适合交互式地进行制图 而且也可以方便地将它作为绘图控件 嵌入GUI应用程序中 它的文档相当完备 并且Gallery页面中有上百幅缩略图 打开之后都有源程序 因此如果你需要绘制某种类型的图 只需要在这个页面中浏览 复制 粘贴一下 基本上都能搞定 展示页面的地址 4 快速绘图 快速绘图matplotlib的pyplot子库提供了和matlab类似的绘图API 方便用户快速绘制2D图表 matplotlib simple plot py pylab模块matplotlib还提供了名为pylab的模块 其中包括了许多numpy和pyplot中常用的函数 方便用户快速进行计算和绘图 可以用于IPython中的快速交互式使用 5 快速绘图 matplotlib中的快速绘图的函数库可以通过如下语句载入 接下来调用figure创建一个绘图对象 并且使它成为当前的绘图对象 通过figsize参数可以指定绘图对象的宽度和高度 单位为英寸 dpi参数指定绘图对象的分辨率 即每英寸多少个像素 缺省值为80 因此本例中所创建的图表窗口的宽度为8 80 640像素 importmatplotlib pyplotasplt plt figure figsize 8 4 6 快速绘图 也可以不创建绘图对象直接调用接下来的plot函数直接绘图 matplotlib会自动创建一个绘图对象 如果需要同时绘制多幅图表的话 可以是给figure传递一个整数参数指定图标的序号 如果所指定序号的绘图对象已经存在的话 将不创建新的对象 而只是让它成为当前绘图对象 下面的两行程序通过调用plot函数在当前的绘图对象中进行绘图 plt plot x y label sin x color red linewidth 2 plt plot x z b label cos x 2 7 快速绘图 plot函数的调用方式很灵活 第一句将x y数组传递给plot之后 用关键字参数指定各种属性 label 给所绘制的曲线一个名字 此名字在图示 legend 中显示 只要在字符串前后添加 符号 matplotlib就会使用其内嵌的latex引擎绘制的数学公式 color 指定曲线的颜色 linewidth 指定曲线的宽度第三个参数 b 指定曲线的颜色和线型 plt plot x y label sin x color red linewidth 2 plt plot x z b label cos x 2 8 快速绘图 接下来通过一系列函数设置绘图对象的各个属性 xlabel ylabel 设置X轴 Y轴的文字 title 设置图表的标题 ylim 设置Y轴的范围 legend 显示图示最后调用plt show 显示出创建的所有绘图对象 plt xlabel Time s plt ylabel Volt plt title PyPlotFirstExample plt ylim 1 2 1 2 plt legend 9 快速绘图 importnumpyasnpimportmatplotlib pyplotaspltx np linspace 0 10 1000 y np sin x z np cos x 2 plt figure figsize 8 4 plt plot x y label sin x color red linewidth 2 plt plot x z b label cos x 2 plt xlabel Time s plt ylabel Volt plt title PyPlotFirstExample plt ylim 1 2 1 2 plt legend plt show 10 快速绘图 11 快速绘图 还可以调用plt savefig 将当前的Figure对象保存成图像文件 图像格式由图像文件的扩展名决定 下面的程序将当前的图表保存为 test png 并且通过dpi参数指定图像的分辨率为120 因此输出图像的宽度为 8X120 960 个像素 实际上不需要调用show 显示图表 可以直接用savefig 将图表保存成图像文件 使用这种方法可以很容易编写出批量输出图表的程序 runmatplotlib simple plot pyplt savefig test png dpi 120 12 快速绘图 绘制多轴图一个绘图对象 figure 可以包含多个轴 axis 在Matplotlib中用轴表示一个绘图区域 可以将其理解为子图 上面的第一个例子中 绘图对象只包括一个轴 因此只显示了一个轴 子图 Axes 可以使用subplot函数快速绘制有多个轴的图表 subplot函数的调用形式如下 subplot numRows numCols plotNum 13 快速绘图 subplot将整个绘图区域等分为numRows行和numCols列个子区域 然后按照从左到右 从上到下的顺序对每个子区域进行编号 左上的子区域的编号为1 如果numRows numCols和plotNum这三个数都小于10的话 可以把它们缩写为一个整数 例如subplot 323 和subplot 3 2 3 是相同的 subplot在plotNum指定的区域中创建一个轴对象 如果新创建的轴和之前创建的轴重叠的话 之前的轴将被删除 14 快速绘图 下面的程序创建3行2列共6个轴 通过axisbg参数给每个轴设置不同的背景颜色 如果希望某个轴占据整个行或者列的话 可以如下调用subplot foridx colorinenumerate rgbyck plt subplot 320 idx 1 axisbg color plt show plt subplot 221 第一行的左图plt subplot 222 第一行的右图plt subplot 212 第二整行plt show 15 快速绘图 当绘图对象中有多个轴的时候 可以通过工具栏中的ConfigureSubplots按钮 交互式地调节轴之间的间距和轴与边框之间的距离 如果希望在程序中调节的话 可以调用subplots adjust函数 它有left right bottom top wspace hspace等几个关键字参数 这些参数的值都是0到1之间的小数 它们是以绘图区域的宽高为1进行正规化之后的坐标或者长度 16 快速绘图 subplot 返回它所创建的Axes对象 可以将它用变量保存起来 然后用sca 交替让它们成为当前Axes对象 并调用plot 在其中绘图 如果需要同时绘制多幅图表 可以给figure 传递一个整数参数指定Figure对象的序号 如果序号所指定的figure对象已经存在 将不创建新的对象 而只是让它成为当前的Figure对象 下面的程序演示了如何依次在不同图表的不同子图中绘制曲线 matplotlib multi figure py 17 快速绘图 首先通过figure 创建了两个图表 它们的序号分别为1和2 然后在图表2中创建了上下并排的两个子图 并用变量ax1和ax2保存 importnumpyasnpimportmatplotlib pyplotaspltplt figure 1 创建图表1plt figure 2 创建图表2ax1 plt subplot 211 在图表2中创建子图1ax2 plt subplot 212 在图表2中创建子图2x np linspace 0 3 100 18 快速绘图 在循环中 先调用figure 1 让图表1成为当前图表 并在其中绘图 然后调用sca ax1 和sca ax2 分别让子图ax1和ax2成为当前子图 并在其中绘图 当它们成为当前子图时 包含它们的图表2也自动成为当前图表 因此不需要调用figure 2 依次在图表1和图表2的两个子图之间切换 逐步在其中添加新的曲线 foriinxrange 5 plt figure 1 选择图表1plt plot x np exp i x 3 plt sca ax1 选择图表2的子图1plt plot x np sin i x plt sca ax2 选择图表2的子图2plt plot x np cos i x plt show 19 快速绘图 20 快速绘图 坐标轴设定Axis容器包括坐标轴的刻度线 刻度标签 坐标网格以及坐标轴标题等内容 刻度包括主刻度和副刻度 分别通过get major ticks 和get minor ticks 方法获得 每个刻度线都是一个XTick或YTick对象 它包括实际的刻度线和刻度标签 为了方便访问刻度线和文本 Axis对象提供了get ticklabels 和get ticklines 方法 可以直接获得刻度标签和刻度线 下面例子进行绘图并得到当前子图的X轴对象axis plt plot 1 2 3 4 5 6 plt show axis plt gca xaxis 21 快速绘图 获得axis对象的刻度位置列表 下面获得axis对象的刻度标签以及标签中的文字 axis get ticklocs array 1 1 5 2 2 5 3 axis get ticklabels 获得刻度标签列表 x get text forxinaxis get ticklabels 获得刻度的文本字符串 u 1 0 u 1 5 u 2 0 u 2 5 u 3 0 22 快速绘图 23 快速绘图 下面获得X轴上表示主刻度线的列表 可看到X轴上共有10条刻度线由于没有副刻度线 因此副刻度线列表的长度为0 使用pyplot模块中的xticks 能够完成X轴上刻度标签的配置 axis get ticklines axis get ticklines minor True 获得副刻度线列表 plt xticks fontsize 16 color red rotation 45 24 快速绘图 上面的例子中副刻度线列表为空 这是因为用于计算副刻度位置的对象默认为NullLocator 它不产生任何刻度线 而计算主刻度位置的对象为AutoLocator 它会根据当前的缩放等配置自动计算刻度的位置 matplotlib提供了多种配置刻度线位置的Locator类 以及控制刻度标签显示的Formatter类 下面的程序设置X轴的主刻度为 4 副刻度为 20 并且主刻度上的标签用数学符号显示 matplotlib axis text py自定义坐标轴的刻度和文字 25 快速绘图 与刻度定位和文本格式化相关的类都在matplotlib ticker模块中定义 程序从中载入了两个类 MultipleLocaton FuncFormatter frommatplotlib tickerimportMultipleLocator FuncFormatter importmatplotlib pyplotasplfrommatplotlib tickerimportMultipleLocator FuncFormatterimportnumpyasnpx np arange 0 4 np pi 0 01 y np sin x pl figure figsize 8 4 pl plot x y ax pl gca 26 快速绘图 程序中通过pi formatter 计算出刻度值对应的刻度文本 很繁琐 defpi formatter x pos m np round x np pi 4 n 4whilem 0andm 2 0 m n m 2 n 2ifm 0 return 0 ifm 1andn 1 return pi ifn 1 returnr d pi mifm 1 returnr frac pi d nreturnr frac d pi d m n 27 快速绘图 X np linspace 0 4 np pi 17 endpoint True Xarray 0 0 78539816 1 57079633 2 35619449 3 14159265 3 92699082 4 71238898 5 49778714 6 28318531 7 06858347 7 85398163 8 6393798 9 42477796 10 21017612 10 99557429 11 78097245 12 56637061 plt xticks 0 0 78539816 1 57079633 2 35619449 3 14159265 3 92699082 4 71238898 5 49778714 6 28318531 7 06858347 7 85398163 8 6393798 9 42477796 10 21017612 10 99557429 11 78097245 12 56637061 r 0 r pi 4 r pi 2 r 3 pi 4 r pi r 5 pi 4 r 3 pi 2 r 7 pi 4 r 2 pi r 9 pi 4 r 5 pi 2 r 11 pi 4 r 3 pi r 13 pi 4 r 7 pi 2 r 15 pi 4 r 4 pi r frac 2 pi 3 28 快速绘图 以指定值的整数倍为刻度放置主 副刻度线 使用指定的函数计算刻度文本 它会将刻度值和刻度的序号作为参数传递给计算刻度文本的函数 ax xaxis set major locator MultipleLocator np pi 4 ax xaxis set minor locator MultipleLocator np pi 20 ax xaxis set major formatter FuncFormatter pi formatter 设置两个坐标轴的范围pl ylim 1 5 1 5 pl xlim 0 np max x 29 快速绘图 pl subplots adjust bottom 0 15 设置图的底边距pl grid 开启网格 主刻度为pi 4ax xaxis set major locator MultipleLocator np pi 4 主刻度文本用pi formatter函数计算ax xaxis set major formatter FuncFormatter pi formatter 副刻度为pi 20ax xaxis set minor locator MultipleLocator np pi 20 设置刻度文本的大小fortickinax xaxis get major ticks tick label1 set fontsize 16 pl show 30 快速绘图 31 绘图函数简介 对数坐标图前面介绍过如何使用plot 绘制曲线图 所绘制图表的X Y轴坐标都是算术坐标 下面看看如何在对数坐标系中绘图 绘制对数坐标图的函数有三个 semilogx semilogy 和loglog 它们分别绘制X轴为对数坐标 Y轴为对数坐标以及两个轴都为对数坐标时的图表 32 绘图函数简介 下面的程序使用4种不同的坐标系绘制低通滤波器的频率响应曲线 其中 左上图为plot 绘制的算术坐标系 右上图为semilogx 绘制的X轴对数坐标系 左下图为semilogy 绘制的Y轴对数坐标系 右下图为loglog 绘制的双对数坐标系 使用双对数坐标系表示的频率响应曲线通常被称为波特图 matplotlib log py importnumpyasnpimportmatplotlib pyplotaspltw np linspace 0 1 1000 1000 p np abs 1 1 0 1j w 计算低通滤波器的频率响应 33 绘图函数简介 plt subplot 221 plt plot w p linewidth 2 plt ylim 0 1 5 plt subplot 222 plt semilogx w p linewidth 2 plt ylim 0 1 5 plt subplot 223 plt semilogy w p linewidth 2 plt ylim 0 1 5 plt subplot 224 plt loglog w p linewidth 2 plt ylim 0 1 5 plt show 34 绘图函数简介 35 绘图函数简介 极坐标图极坐标系是和笛卡尔 X Y 坐标系完全不同的坐标系 极坐标系中的点由一个夹角和一段相对中心点的距离来表示 下面的程序绘制极坐标图 matplotlib polar py importnumpyasnpimportmatplotlib pyplotasplttheta np arange 0 2 np pi 0 02 36 绘图函数简介 程序中调用subplot 创建子图时通过设polar参数为True 创建一个极坐标子图 然后调用plot 在极坐标子图中绘图 也可以使用polar 直接创建极坐标子图并在其中绘制曲线 plt subplot 121 polar True plt plot theta 1 6 np ones like theta linewidth 2 plt plot 3 theta theta 3 linewidth 2 37 绘图函数简介 rgrids 设置同心圆栅格的半径大小和文字标注的角度 因此右图中的虚线圆圈有三个 半径分别为0 5 1 0和1 5 这些文字沿着45 线排列 Thetagrids 设置放射线栅格的角度 因此右图中只有两条放射线 角度分别为0 和45 plt subplot 122 polar True plt plot theta 1 4 np cos 5 theta linewidth 2 plt plot theta 1 8 np cos 4 theta linewidth 2 plt rgrids np arange 0 5 2 0 5 angle 45 plt thetagrids 0 45 plt show 38 绘图函数简介 39 绘图函数简介 柱状图柱状图用其每根柱子的长度表示值的大小 它们通常用来比较两组或多组值 下面的程序从文件中读入中国人口的年龄分布数据 并使用柱状图比较男性和女性的年龄分布 matplotlib bar py绘制比较男女人口的年龄分布图 importnumpyasnpimportmatplotlib pyplotasplt 40 绘图函数简介 读入的数据中 第0列为年龄 它将作为柱状图的横坐标 首先计算柱状图中每根柱子的宽度 因为要在每个年龄段上绘制两根柱子 因此柱子的宽度应该小于年龄段的二分之一 这里以年龄段的0 4倍作为柱子的宽度 data np loadtxt china population txt width data 1 0 data 0 0 0 4 41 绘图函数简介 调用bar 绘制男性人口分布的柱状图 它的第一个参数为每根柱子左边缘的横坐标 为了让男性和女性的柱子以年龄刻度为中心 这里让每根柱子左侧的横坐标为 年龄减去柱子的宽度 Bar 的第二个参数为每根柱子的高度 第三个参数指定所有柱子的宽度 当第三个参数为序列时 可以为每根柱子指定宽度 plt figure figsize 8 5 plt bar data 0 width data 1 1e7 width color b label u 男 42 绘图函数简介 绘制女性人口分布的柱状图 这里以年龄为柱子的左边缘横坐标 因此女性和男性的人口分布图以年龄刻度为中心 由于bar 不自动修改颜色 因此程序中通过color参数设置两个柱状图的颜色 plt bar data 0 data 2 1e7 width color r label u 女 plt xlim width 100 plt xlabel u 年龄 plt ylabel u 人口 千万 plt legend plt show 43 绘图函数简介 44 绘图函数简介 散列图使用plot 绘图时 如果指定样式参数为仅绘制数据点 那么所绘制的就是一幅散列图 例如 但是这种方法所绘制的点无法单独指定颜色和大小 而scatter 所绘制的散列图却可以指定每个点的颜色和大小 下面的程序演示scatter 的用法 matplotlib scatter py plt plot np random random 100 np random random 100 o 45 绘图函数简介 scatter 的前两个参数是数组 分别指定每个点的X轴和Y轴的坐标 s参数指定点的大小 值和点的面积成正比 它可以是一个数 importnumpyasnpimportmatplotlib pyplotaspltplt figure figsize 8 4 x np random random 100 y np random random 100 plt scatter x y s x 1000 c y marker 5 1 alpha 0 8 lw 2 facecolors none plt xlim 0 1 plt ylim 0 1 plt show 46 绘图函数简介 指定所有点的大小 也可以是数组 分别对每个点指定大小 c参数指定每个点的颜色 可以是数值或数组 这里使用一维数组为每个点指定了一个数值 通过颜色映射表 每个数值都会与一个颜色相对应 默认的颜色映射表中蓝色与最小值对应 红色与最大值对应 当c参数是形状为 N 3 或 N 4 的二维数组时 则直接表示每个点的RGB颜色 marker参数设置点的形状 可以是个表示形状的字符串 也可以是表示多边形的两个元素的元组 第一个元素表示多边形的边数 47 绘图函数简介 第二个元素表示多边形的样式 取值范围为0 1 2 3 0表示多边形 1表示星形 2表示放射形 3表示忽略边数而显示为圆形 最后 通过alpha参数设置点的透明度 通过lw参数设置线宽 lw是linewidth的缩写 facecolors参数为 none 时 表示散列点没有填充色 48 绘图函数简介 49 绘图函数简介 图像imread 和imshow 提供了简单的图像载入和显示功能 imread 可以从图像文件读入数据 得到一个表示图像的NumPy数组 它的第一个参数是文件名或文件对象 format参数指定图像类型 如果省略 就由文件的扩展名决定图像类型 对于灰度图像 它返回一个形状为 M N 的数组 对于彩色图像 返冋形状为 M N C 的数组 其中 M为图像的高度 N为图像的宽度 C为3或4 表示图像的通道数 img plt imread lena jpg 50 绘图函数简介 下面的程序从 lena jpg 中读入图像数据 得到的数组img是一个形状为 393 512 3 的单字节无符号整数数组 这是因为通常使用的图像都是采用单字节分别保存每个像素的红 绿 蓝三个通道的分量 img plt imread lena jpg img shape 393L 512L 3L img dtypedtype uint8 51 绘图函数简介 imshow 可以用来显示imread 返回的数组 如果数组是表示多通道图像的三维数组 那么每个像素的颜色由各个通道的值决定 请注意 从JPG图像中读入的数据是上下颠倒的 为了正常显示图像 可以将数组的第0轴反转 或者设置imshow 的origin参数为 lower 从而让所显示图表的原点在左下角 plt imshow img 注意图像是上下颠倒的 plt imshow img 1 反转图像数组的第0轴 or plt imshow img origin lower 让图表的原点在左下角 52 绘图函数简介 如果三维数组的元素类型为浮点数 那么元素的取值范围为0 0到1 0 与颜色值0到255对应 超出这个范围可能会出现颜色异常的像素 下面的例子将数组img转换为浮点数组并用imshow 进行显示 img img 1 plt imshow img 1 0 取值范围为0 0到255 0的浮点数组 不能正确显示颜色 plt imshow img 255 0 取值范围为0 0到1 0的浮点数组 能正确显示颜色 plt imshow np clip img 200 0 0 1 使用clip 限制取值范围 整个图像变亮 53 绘图函数简介 如果imshow 的参数是二维数组 就使用颜色映射表决定每个像素的颜色 下面显示图像中的红色通道 显示效果比较吓人 因为默认的图像映射将最小值映射为蓝色 将最大值映射为红色 可以使用colorbar 将颜色映射表在图表中显示出来 plt imshow img 0 plt colorbar 54 绘图函数简介 通过imshow 的cmap参数可以修改显示图像时所采用的颜色映射表 颜色映射表是一个ColorMap对象 matplotlib中已经预先定义好了很多颜色映射表 可通过下面的语句找到这些颜色映射表的名字 matplotlib imshow py 下面使用名为copper的颜色映射表显示图像的红色通道 很有老照片的味道 importmatplotlib cmascm cm cmapnames Spectral copper RdYlGn Set2 sumner spring gist ncar plt imshow img 0 cmap cm copper 55 绘图函数简介 importnumpyasnpimportmatplotlib pyplotaspltimportmatplotlib cmascmplt subplots adjust 0 0 1 1 0 05 0 05 plt subplot 331 img plt imread lena jpg plt imshow img plt subplot 332 plt imshow img 1 plt subplot 333 plt imshow img origin lower img img 1 plt subplot 334 plt imshow img 1 0 56 绘图函数简介 plt subplot 335 plt imshow img 255 0 plt subplot 336 plt imshow np clip img 200 0 0 1 plt subplot 325 plt imshow img 0 plt colorbar plt subplot 326 plt imshow img 0 cmap cm copper plt colorbar foraxinplt gcf axes ax set axis off ax set axis off plt show 57 绘图函数简介 58 绘图函数简介 还可以使用imshow 显示任意的二维数据 例如下面的程序使用图像直观地显示了二元函数 matplotlib 2dfunc py使用imshow 可视化二元函数 importnumpyasnpimportmatplotlib pyplotaspltimportmatplotlib cmascmy x np ogrid 2 2 200j 2 2 200j z x np exp x 2 y 2 extent np min x np max x np min y np max y 59 绘图函数简介 首先通过数组的广播功能计算出表示函数值的二维数组Z 注意它的第0轴表示Y轴 第1轴表示X轴 然后将X Y轴的取值范围保存到extent列表中 plt figure figsize 10 3 plt subplot 121 plt imshow z extent extent origin lower plt colorbar plt subplot 122 plt imshow z extent extent cmap cm gray origin lower plt colorbar plt show 60 绘图函数简介 将extent列表传递给imshow 的extent参数 这样一来 图表的X Y轴的刻度标签将使用extent列表所指定的范围 61 绘图函数简介 等值线图还可以使用等值线图表示二元函数 所谓等值线 是指由函数值相等的各点连成的平滑曲线 等值线可以直观地表示二元函数值的变化趋势 例如等值线密集的地方表示函数值在此处的变化较大 matplotlib中可以使用contour 和contourf 描绘等值线 它们的区别是 contourf 所得到的是带填充效果的等值线 matplotlib contour py用contour和contourf描绘等值线图 62 绘图函数简介 importnumpyasnpimportmatplotlib pyplotasplty x np ogrid 2 2 200j 3 3 300j z x np exp x 2 y 2 extent np min x np max x np min y np max y plt figure figsize 10 4 plt subplot 121 cs plt contour z 10 extent extent plt clabel cs plt subplot 122 plt contourf x reshape 1 y reshape 1 z 20 plt show 63 绘图函数简介 为了更淸楚地区分X轴和Y轴 这里让它们的取值范围和等分次数均不相同 这样得到的数组z的形状为 200 300 它的第0轴对应Y轴 第1轴对应X轴 调用contour 绘制数组z的等值线图 第二个参数为10 表示将整个函数的取值范围等分为10个区间 即显示的等值线图中将有9条等值线 和imshow 一样 可以使用extent参数指定等值线图的X轴和Y轴的数据范围 contour 所返回的是一个QuadContourSet对象 将它传递给clabel 为其中的等值线标上对应的值 64 绘图函数简介 调用contourf 绘制将取值范围等分为20份 带填充效果的等值线图 这里演示了另外一种设置X Y轴取值范围的方法 它的前两个参数分别是计算数组z时所使用的X轴和Y轴上的取样点 这两个数组必须是一维的 65 绘图函数简介 还可以使用等值线绘制隐函数曲线 显然 无法像绘制一般函数那样 先创建一个等差数组表示变量的取值点 然后计算出数组中每个x所对应的y值 可以使用等值线解决这个问题 显然隐函数的曲线就是值等于0的那条等值线 下面的程序绘制函数在f x y 0和f x y 0 1 0时的曲线 matplotlib implicit func py importnumpyasnpimportmatplotlib pyplotasplty x np ogrid 1 5 1 5 200j 1 5 1 5 200j f x 2 y 2 4 x 2 y 2 2 66 绘图函数简介 plt figure figsize 9 4 plt subplot 121 extent np min x np max x np min y np max y cs plt contour f extent extent levels 0 0 1 colors b r linestyles solid dashed linewidths 2 2 plt subplot 122 forcincs collections data c get paths 0 verticesplt plot data 0 data 1 color c get color 0 linewidth c get linewidth 0 plt show 67 绘图函数简介 68 绘图函数简介 在调用contour 绘制等值线时 可以通过levels参数指定所绘制等值线对应的函数值 这里设置levels参数为 0 0 1 因此最终将绘制两条等值线 观察图会发现 表示隐函数f x 0蓝色实线并不是完全连续的 在图的中间部分它由许多孤立的小段构成 因为等值线在原点附近无限靠近 因此无论对函数f的取值空间如何进行细分 总是会有无法分开的地方 最终造成了图中的那些孤立的细小区域 而表示隐函数f x y 0 1 0的红色虚线则是闭合且连续的 69 绘图函数简介 可以通过contour 返回的对象获得等值线上每点的数据 下面在IPython中观察变量cs 它是一个QuadContourSet对象 cs对象的collections属性是一个等值线列表 每条等值线用一个LineCollection对象表示 cs collections runmatplotlib implicit func py cs 70 绘图函数简介 每个LineCollection对象都有它自己的颜色 线型 线宽等属性 注意这些属性所获得的结果外面还有一层封装 要获得其第0个元素才是真正的配置 由类名可知 LineCollection对象是一组曲线的集合 因此它可以表示像蓝色实线那样由多条线构成的等值线 它的get paths 方法获得构成等值线的所有路径 本例中蓝色实线 c get color 0 array 1 0 0 1 c get linewidth 0 2 71 绘图函数简介 所表示的等值线由42条路径构成 路径是一个Path对象 通过它的vertices属性可以获得路径上所有点的坐标 len cs collections 0 get paths 42 path cs collections 0 get paths 0 type path path verticesarray 0 08291457 0 98938936 0 09039269 0 98743719 0 08291457 0 98938936 72 绘图函数简介 下面的程序从等值线集合cs中找到表示等值线的路径 并使用plot 将其绘制出来 plt subplot 122 forcincs collections data c get paths 0 verticesplt plot data 0 data 1 color c get color 0 linewidth c get linewidth 0 73 绘图函数简介 三维绘图mpl toolkits mplot3d模块在matplotlib基础上提供了三维绘图的功能 由于它使用matplotlib的二维绘图功能来实现三维图形的绘制工作 因此绘图速度有限 不适合用于大规模数据的三维绘图 如果需要更复杂的三维数据可视化功能 可使用Mayavi matplotlib surface py使用matplotlib绘制三维曲面 74 绘图函数简介 演示matplotlib的三维绘图功能 importnumpyasnpimportmpl toolkits mplot3dimportmatplotlib pyplotaspltx y np mgrid 2 2 20j 2 2 20j z x np exp x 2 y 2 ax plt subplot 111 projection 3d ax plot surface x y z rstride 2 cstride 1 cmap plt cm Blues r ax set xlabel X ax set ylabel Y ax set zlabel Z plt show 75 绘图函数简介 76 绘图函数简介 首先载入mplot3d模块 matplotlib中与三维绘图相关的功能均在此模块中定义 使用mgrid创建X Y平面的网格并计算网格上每点的高度z 由于绘制三维曲面的函数要求X Y和Z轴的数据都用相同形状的二维数组表示 因此这里不能使用ogrid创建 和之前的imshow 不同 数组的第0轴可以表示X和Y轴中的任意一个 在本例中第0轴表示X轴 第1轴表示Y轴 在当前图表中创建一个子图 通过projection参数指定子图的投影模式为 3d 这样subplot 将返回一个用于三维绘图的Axes3D子图对象 77 绘图函数简介 投影模式 投影模式决定了点从数据坐标转换为屏幕坐标的方式 可以通过下面的语句获得当前有效的投影模式的名称 只有在载入mplot3d模块之后 此列表中才会出現 3d 投影模式 aitoff hammer lamberf mollweide 等均为地图投影 polar 为极坐标投影 rectilinear 則是默认的直线投影模式 frommatplotlibimportprojections projections get projection names 3d aitoff hammer lambert mollweide1 polar rectilinear 78 绘图函数简介 调用Axes3D对象的plot surface 绘制三维曲面 其中 参数x y z都是形状为 20 20 的二维数组 数组x和y构成了X Y平面上的网格 而数组z则是网格上各点在曲面上的取值 通过cmap参数来指定值和颜色之间的映射 即曲面上各点的高度值与其颜色的对应关系 rstride和cstride参数分别是数组的第0轴和第1轴的下标间隔 对于很大的数组 使用较大的间隔可以提高曲面的绘制速度 程序中 plot surfece 调用和下面的语句是等价的 ax plot surface x 2 y 2 z 2 rstride 1 cstride 1 79 绘图函数简介 除了绘制三维曲面之外 Axes3D对象还提供了许多其他的三维绘图方法 可以通过下面的链接地址找到各种三维绘图的演示程序 80 frommpl toolkits mplot3dimportAxes3Dfig pl figure ax Axes3D fig X np arange 4 4 0 25 Y np arange 4 4 0 25 X Y np meshgrid X Y R np sqrt X 2 Y 2 Z np sin R ax plot surface X Y Z rstride 1 cstride 1 cmap hot 81 82
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!