matplotlib的优点_超详细matplotlib基础介绍!!!

(给Python开发者加星标,提升Python技能)

来源:逐梦er

https://zhumenger.blog.csdn.net/article/details/106530281

【导语】:出色的数据可视化,会让你的数据分析等工作锦上添花,让人印(升)象(职)深(加)刻(薪)。matplotlib是python优秀的数据可视化库,python数据分析必备利器,本文专门为你整理了matplotlib详细使用方法,来学习吧!

--- 以下是正文 ---

数据可视化非常重要,因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。

matplotlib 库是专门用于开发2D图表(包括3D图表)的,突出优点:

  • 使用起来极为简单。

  • 以渐进、交互式方式实现数据可视化。

  • 表达式和文本使用LaTeX排版。

  • 对图像元素控制力强。

  • 可输出PNG、PDF、SVG和EPS等多种格式。

安装

conda install matplotlib

或者

pip install matplotlib

matplotlib 架构

matplotlib 的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。其不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力。有了这些附加功能,matplotlib 就能生成以键盘按键或鼠标移动触发的事件的交互式图表。

从逻辑上来讲,matplotlib 的整体架构为3层,各层之间单向通信:

  • Scripting (脚本)层。

  • Artist (表现)层。

  • Backend (后端)层。

一、matplotlib的基本用法

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 30) # 在区间内生成30个等差数y = np.sin(x)print('x = ', x)print('y = ', y)

输出:

x =  [-3.14159265 -2.92493109 -2.70826953 -2.49160797 -2.2749464  -2.05828484 -1.84162328 -1.62496172 -1.40830016 -1.19163859 -0.97497703 -0.75831547 -0.54165391 -0.32499234 -0.10833078  0.10833078  0.32499234  0.54165391  0.75831547  0.97497703  1.19163859  1.40830016  1.62496172  1.84162328  2.05828484  2.2749464   2.49160797  2.70826953  2.92493109  3.14159265]y =  [-1.22464680e-16 -2.14970440e-01 -4.19889102e-01 -6.05174215e-01 -7.62162055e-01 -8.83512044e-01 -9.63549993e-01 -9.98533414e-01 -9.86826523e-01 -9.28976720e-01 -8.27688998e-01 -6.87699459e-01 -5.15553857e-01 -3.19301530e-01 -1.08119018e-01  1.08119018e-01  3.19301530e-01  5.15553857e-01  6.87699459e-01  8.27688998e-01  9.28976720e-01  9.86826523e-01  9.98533414e-01  9.63549993e-01  8.83512044e-01  7.62162055e-01  6.05174215e-01  4.19889102e-01  2.14970440e-01  1.22464680e-16]
  • 画一条曲线

plt.figure() # 创建一个新的窗口plt.plot(x, y) # 画一个x与y相关的曲线plt.show()# 显示图像

2c1105e1917985d841256c4f956a2593.png

  • 画多条曲线以及添加坐标轴和标签

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数y = np.sin(x)linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 自定义窗口的大小plt.plot(x, y)plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题plt.xlabel('x') # 定义横轴标签plt.ylabel('y') # 定义纵轴标签plt.show()

b05f40dbbf2fbe0c2eb3bbd852865463.png

  • 指定坐标范围 and 设置坐标轴刻度

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数y = np.sin(x)linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 自定义窗口的大小plt.plot(x, y)plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题plt.xlabel('x') # 定义横轴标签plt.ylabel('y') # 定义纵轴标签plt.xlim(-np.pi, np.pi)plt.ylim(-1, 1)# 重新设置x轴的刻度# plt.xticks(np.linspace(-np.pi, np.pi, 5))x_value_range = np.linspace(-np.pi, np.pi, 5)x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']plt.xticks(x_value_range, x_value_strs)plt.show() # 显示图像

58eeb37c7b4d10d40b9f750315ecc423.png

  • 定义原点在中心的坐标轴

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100)y = np.sin(x)linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) plt.plot(x, y)plt.plot(x, linear_y, color = "red", linestyle = '--') plt.title('y = sin(x) and y = 0.2x + 0.1')plt.xlabel('x') plt.ylabel('y') plt.xlim(-np.pi, np.pi)plt.ylim(-1, 1)# plt.xticks(np.linspace(-np.pi, np.pi, 5))x_value_range = np.linspace(-np.pi, np.pi, 5)x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']plt.xticks(x_value_range, x_value_strs)ax = plt.gca() # 获取坐标轴ax.spines['right'].set_color('none') # 隐藏上方和右方的坐标轴ax.spines['top'].set_color('none')# 设置左方和下方坐标轴的位置ax.spines['bottom'].set_position(('data', 0)) # 将下方的坐标轴设置到y = 0的位置ax.spines['left'].set_position(('data', 0)) # 将左方的坐标轴设置到 x = 0 的位置plt.show() # 显示图像

043487806e6d07527130bcae74193516.png

  • legend图例

使用xticks()和yticks()函数替换轴标签,分别为每个函数传入两列数值。第一个列表存储刻度的位置,第二个列表存储刻度的标签。

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100)y = np.sin(x)linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 为曲线加上标签plt.plot(x, y, label = "y = sin(x)")plt.plot(x, linear_y, color = "red", linestyle = '--', label = 'y = 0.2x + 0.1') plt.title('y = sin(x) and y = 0.2x + 0.1')plt.xlabel('x') plt.ylabel('y') plt.xlim(-np.pi, np.pi)plt.ylim(-1, 1)# plt.xticks(np.linspace(-np.pi, np.pi, 5))x_value_range = np.linspace(-np.pi, np.pi, 5)x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']plt.xticks(x_value_range, x_value_strs)ax = plt.gca() ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.spines['bottom'].set_position(('data', 0)) ax.spines['left'].set_position(('data', 0)) # 将曲线的信息标识出来plt.legend(loc = 'lower right', fontsize = 12)plt.show() 

266299e70444cc6b13961c048bd11e84.png

legend方法中的loc 参数可选设置

位置字符串位置编号位置表述
‘best’0最佳位置
‘upper right’1右上角
‘upper left’2左上角
‘lower left’3左下角
‘lower right’4右下角
‘right’5右侧
‘center left’6左侧垂直居中
‘center right’7右侧垂直居中
‘lower center’8下方水平居中
‘upper center’9上方水平居中
‘center’10正中间

二、柱状图

使用的方法:plt.bar

import numpy as npimport matplotlib.pyplot as pltplt.figure(figsize = (16, 12))x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = np.array([3, 5, 7, 6, 2, 6, 10, 15])plt.plot(x, y, 'r', lw = 5) # 指定线的颜色和宽度x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = np.array([13, 25, 17, 36, 21, 16, 10, 15])plt.bar(x, y, 0.2, alpha = 1, color='b') # 生成柱状图,指明图的宽度,透明度和颜色plt.show()

e39f1a1e0cc54a0def68f26f987235d2.png

有的时候柱状图会出现在x轴的俩侧,方便进行比较,代码实现如下:

import numpy as npimport matplotlib.pyplot as pltplt.figure(figsize = (16, 12))n = 12x = np.arange(n) # 按顺序生成从12以内的数字y1 = (1 - x / float(n)) * np.random.uniform(0.5, 1.0, n)y2 = (1 - x / float(n)) * np.random.uniform(0.5, 1.0, n)# 设置柱状图的颜色以及边界颜色#+y表示在x轴的上方 -y表示在x轴的下方plt.bar(x, +y1, facecolor = '#9999ff', edgecolor = 'white')plt.bar(x, -y2, facecolor = '#ff9999', edgecolor = 'white')plt.xlim(-0.5, n) # 设置x轴的范围,plt.xticks(()) # 可以通过设置刻度为空,消除刻度plt.ylim(-1.25, 1.25) # 设置y轴的范围plt.yticks(())# plt.text()在图像中写入文本,设置位置,设置文本,ha设置水平方向对其方式,va设置垂直方向对齐方式for x1, y in zip(x, y2):    plt.text(x1, -y - 0.05, '%.2f' % y, ha = 'center', va = 'top')for x1, y in zip(x, y1):    plt.text(x1, y + 0.05, '%.2f' % y, ha = 'center', va = 'bottom')plt.show()

c38f7d60ddfe7eeed0e6f402246ba54d.png

三、散点图

import numpy as npimport matplotlib.pyplot as pltN = 50x = np.random.rand(N)y = np.random.rand(N)colors = np.random.rand(N)area = np.pi * (15 * np.random.rand(N))**2plt.scatter(x, y, s = area,c = colors, alpha = 0.8)plt.show()

86807b7cee069b4f7c1200d5d102df39.png

四、等高线图

import matplotlib.pyplot as pltimport numpy as npdef f(x, y):    return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)n = 256x = np.linspace(-3, 3, n)y = np.linspace(-3, 3, n)X, Y = np.meshgrid(x, y)  # 生成网格坐标 将x轴与y轴正方形区域的点全部获取line_num = 10 # 等高线的数量plt.figure(figsize = (16, 12))#contour 生成等高线的函数#前俩个参数表示点的坐标,第三个参数表示等成等高线的函数,第四个参数表示生成多少个等高线C = plt.contour(X, Y, f(X, Y), line_num, colors = 'black', linewidths = 0.5) # 设置颜色和线段的宽度plt.clabel(C, inline = True, fontsize = 12) # 得到每条等高线确切的值# 填充颜色, cmap 表示以什么方式填充,hot表示填充热量的颜色plt.contourf(X, Y, f(X, Y), line_num, alpha = 0.75, cmap = plt.cm.hot)plt.show()

d5db078c9a1ff666c0c89ccadc1c5c7d.png

五、处理图片

import matplotlib.pyplot as pltimport matplotlib.image as mpimg # 导入处理图片的库import matplotlib.cm as cm # 导入处理颜色的库colormapplt.figure(figsize = (16, 12))img = mpimg.imread('image/fuli.jpg')# 读取图片print(img) # numpy数据print(img.shape) # plt.imshow(img, cmap = 'hot')plt.colorbar() # 得到颜色多对应的数值plt.show()
[[[ 11  23  63]  [ 12  24  64]  [  1  13  55]  ...  [  1  12  42]  [  1  12  42]  [  1  12  42]] [[ 19  31  71]  [  3  15  55]  [  0  10  52]  ...  [  0  11  39]  [  0  11  39]  [  0  11  39]] [[ 22  34  74]  [  3  15  55]  [  7  19  61]  ...  [  0  11  39]  [  0  11  39]  [  0  11  39]] ... [[ 84 125 217]  [ 80 121 213]  [ 78 118 214]  ...  [ 58  90 191]  [ 54  86 187]  [ 53  85 186]] [[ 84 124 220]  [ 79 119 215]  [ 78 117 218]  ...  [ 55  87 188]  [ 55  87 188]  [ 55  87 188]] [[ 83 121 220]  [ 80 118 219]  [ 83 120 224]  ...  [ 56  88 189]  [ 58  90 191]  [ 59  91 192]]](728, 516, 3)

54072c08f2b93db1c809d2fb57a95099.png

利用numpy矩阵得到图片

import matplotlib.pyplot as pltimport matplotlib.cm as cm # 导入处理颜色的库colormapimport numpy as npsize =  8# 得到一个8*8数值在(0, 1)之间的矩阵a = np.linspace(0, 1, size ** 2).reshape(size, size)plt.figure(figsize = (16, 12))plt.imshow(a)plt.show()

4ec0981c808185aba863630e0707eed9.png

六、3D图

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D # 导入Axes3D对象fig = plt.figure(figsize = (16, 12))ax = fig.add_subplot(111, projection = '3d') # 得到3d图像x = np.arange(-4, 4, 0.25)y = np.arange(-4, 4, 0.25)X, Y = np.meshgrid(x, y) # 生成网格Z = np.sqrt(X ** 2 + Y ** 2)# 画曲面图              # 行和列对应的跨度         # 设置颜色ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))plt.show()

91502b84e7ee9be92d775ea2f0936e13.png

以上是matplotlib基于测试数据的数据可视化,结合实际项目中数据,代码稍加修改,即可有让人印象深刻的效果。

- EOF -

推荐阅读  点击标题可跳转

1、25 个常用 Matplotlib 图的 Python 代码,收藏收藏!

2、Python 绘图库 Matplotlib 入门教程

3、基于 matplotlib 的 2D/3D 抽象网格和能量曲线绘制程序

觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

30e23cef3589dba7371c99ac6256cccc.png

点赞和在看就是最大的支持❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】WPF PRISM开发入门一( 初始化PRISM WPF程序)

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。这个系列的博客将选择PRISM 4.1版本来讲解。可以从微软官网上下载到PRISM 4.1相关内容。将下载下来的文件解压开: …

截屏悬浮软件_功能强大,却小巧的录屏软件,不在错过你的王者时刻

看看录屏是一款操作简单。功能强大的录屏软件。他可以设置你录制视频的一个分辨率,帧率以及录制屏幕方向,非常方便,用户将手机摇一摇就可以控制开启和停止录屏,高效录制精彩瞬间,在录制游戏视频的时候也可以做到不掉帧…

公司用的非标普通自动化用单片机还是plc_PLC的介绍

PLC又叫可编程控制器,一开始是替代传统接触器的一个东西。随着人工价格不断的上涨,自动化的设备会越来越普及。自动化不再是大企业才用的起的东西 ,各种多元化小型自动化设备进入了普通小企业甚至家庭作坊。PLC其实是单片机开发出来的一种工业…

比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国

Linux 已经成为工作、娱乐和个人生活等多个领域的支柱,人们已经越来越离不开它。在 Linux 的帮助下,技术的变革速度超出了人们的想象,Linux 开发的速度也以指数规模增长。因此,越来越多的开发者也不断地加入开源和学习 Linux 开发…

【转】C# 动态对象(dynamic)的用法

说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较。实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。var实际上是编译期抛给我们的“语法糖”,一旦被编译&#x…

关于prototype使用位置问题的讨论

问题贴:http://bbs.csdn.net/topics/390446362 new四部曲: (1)创建一个新的对象,并让函数的 this 指针指向它; (2)将函数的 prototype 对象的所有成员都赋给这个新对象&#xff0c…

@query传参_vue-router中params传参和query传参的区别及处理方法

在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则…

JS成员函数声明位置优化

上代码 function A() {this.a function(){}; } a1 new A(); a2 new A(); alert( a1.aa2.a);输出 说明了a1.a,a2.a指向的内存不是同一个,也就是每个对象都有一份自己的函数,只不过一个类的所有实例之间的函数长得是一样的! 所以…

mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务

springboot开启事务很简单,只需要一个注解Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql&…

JS静态变量和静态函数

function A(){this.id "我是AA"} // 在构造函数外定义的都是所有对象共享的 A.id "我是A"; A.sayId function(){alert(A.id);} A.sayId(); 如上,在构造函数外用函数名定义的属性或者方法,可以也只可以通过函数名来访问&…

Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded

报错java.lang.OutOfMemoryError: GC overhead limit exceeded HDFS上有一些每天增长的文件,使用Snappy压缩,突然某天OOM了 1.原因: 因为snappy不能split切片,也就会导致一个文件将会由一个task来读取,读取后解压,数…

【转】VS编程,快速折叠或者展开代码到 #region 级别的设置方法。

在代码比较多的文档中,使用#region进行分功能的区分折叠是一个方便的方法。 如果文档中含有很多个#region标签,想一次全部折叠或者展开,有时是必要的。 这里给出一种设置方法,适用于VS2019,其它VS版本请自己验证。 1、…

.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

前言在众多SQL中,统计型SQL绝对是让人头疼的一类,之所以如此,是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHEN、IF、IFNULL三种函数。1 CASE WHENCase when语句能在SQL语句中织入判断逻辑…

Spark2内存调优总结 - 内存划分 与 内存计算 与 调参方式

使用的Spark2以上版本所以只考虑UnifiedMemoryManager动态内存管理,如图: 1. 内存划分 与 内存计算 与 调参方式 1.1 三部分:Spark内存、用户内存、预留内存 预留内存:300MB 固定Spark内存和用户内存比例由参数spark.memory.fra…

java 通过id获取html代码_Maven私服安装配置,java通过私服下载代码,并打包后上传到私服(Nexus)...

Maven私服一般安装Nexus。首先,Nexus下载,访问Nexus官方网址https://www.sonatype.com/download-nexus-repo-oss下载完成后是个压缩包第二步 配置:1)将上一步下载的nexus解压2)端口和监听配置application-port:监听端口applicatio…

一些网站github等无法连接服务器的解决办法

1.打开站长工具 http://tool.chinaz.com/speedtest/ 2.搜索github.com/ 3. 点击总耗时-排序 4. 拿到延迟最低的ip地址20.205.243.166 5.修改本地dns windows:C:\Windows\System32\drivers\etc 修改hosts文件,末尾添加 20.205.243.166 github.com Lin…

【转】异步编程系列(Thread、Task、async/await、ajax等)

序 经过一番努力,我写的异步编程系列也算有头有尾,当然不是说这个系列已经更新完毕,这个头尾只是表示新旧知识点都有简单涉及到,接下去我还会丰富这一系列并且有机会整个小应用(愿景是弄一个开源组件吧,结合…

linux里qt画直线_Qt与Web混合开发(一)简单使用

前言《Qt与Web混合开发》系列文章,主要讨论Qt与Web混合开发相关技术。这类技术存在适用场景,例如:Qt项目使用Web大量现成的组件/方案做功能扩展,Qt项目中性能无关/频繁更新迭代的页面用html单独实现,Qt项目提供Web形式…

ES curator离线安装与部署

1.版本: es:6.5.1 curator:5.8.4 下载地址:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/yum-repository.html#_signing_key_2 2.连接不上网站怎么办? 出现无法访问此网页的话&#xff0…