matplotlib画图_漂亮,超详细的matplotlib画图基础

来自 | 逐梦erhttps://zhumenger.blog.csdn.net/article/details/106530281本文仅作技术交流,如有侵权,请联系后台删除。数据可视化非常重要,因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。matplotlib 库是专门用于开发2D图表(包括3D图表)的,突出优点:
  • 使用起来极为简单。
  • 以渐进、交互式方式实现数据可视化。
  • 表达式和文本使用LaTeX排版。
  • 对图像元素控制力强。
  • 可输出PNG、PDF、SVG和EPS等多种格式。

   目  录

  • 安装
  • matplotlib 架构
  • matplotlib的基本用法
  • 一.线性图
  • 二.柱状图
  • 三.散点图
  • 四.等高线图
  • 五.处理图片
  • 六.3D图

   安  装

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()# 显示图像

b9b9896cef0aa6597e864428b3d19e8d.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()

27c320bf5cf1eb4099807de30dd1bcaa.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() # 显示图像

9aec356a0873c8734807528f3dbd66b2.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() # 显示图像

2257c599deb879db0749614f5f3d4de0.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() 

ec789f310d80e19e14f2c31b6b034b0b.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()

9e831542ab2d1bc79e02a3f47ea2b7cb.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()

19953635ba6b6a5770cdf14704994e21.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()

ddfa68144447e5f2e9ab6146bc88c649.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()

e2e6935a75019fc39ea5b534cbf14ab9.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)

c312107df365904dd203eba7f46d86dd.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()

c09b94fa2ac8f0380fd7c346de925057.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()

5081ed5405c373411b2f9eda3cdae829.png

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

-结束-

af77a2caa63c3d62262244d3a3b23f8d.png

长按识别,即可关注

免费送5本经典书,已经送出200位+

《深度学习-花书》《Python基础教程3》《机器学习实战》等

好文章,请  在看 

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

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

相关文章

android recycleview长按多选_UI设计中Android和IOS设计差异总结

由于设计师、产品经理使用的移动设备大部分是iPhone,所以在做设计时,容易忽略Android和iOS的差异,按照iOS的规范进行设计,两端只做一套。只做一套的会存在两个问题:1、安卓用户的使用习惯不太适应iOS的设计&#xff0c…

自定义动画属性java_创建酷炫动画效果的10个JavaScript库

原标题:创建酷炫动画效果的10个JavaScript库1) Dynamics.jsDynamics.js是设计基于物理规律的动画的重要Java库。它可以赋予生命给所有包含CSS 和SVG属性的DOM(文本对象模型)元素,换句话说,Dynamics.js适用于所有Java对象以及一系列其它的元素…

php xlsx里插入图片_常见的 PHP 面试题和答案分享

如何直接将输出显示给浏览器&#xff1f;将输出直接显示给浏览器&#xff0c;我们必须使用特殊标记 <&#xff1f;and&#xff1f;>。PHP 是否支持多重继承&#xff1f;PHP 只支持单继承。PHP 的类使用关键字 extends 继承另一个类获取图片属性&#xff08;size, width, …

pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)

pandas中的concat的功能&#xff1a;假设你现在需要将多个数据合并&#xff0c;前提是&#xff1a;这几个文件列名都一致&#xff0c;也就是说这几个文件格式完全一样&#xff0c;只是数据不太一样&#xff0c;类似于合并多个文件这种&#xff0c;实际数据分析中也会遇到这种情…

java中的de是什么_【转】java中main函数解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html从写java至今&#xff0c;写的最多的可能就是主函数public static void main(String[] args) {}但是以前一直都没有问自己&#xff0c;为什么要这么写&#xff0c;因为在c语言中就没有这样…

JAVA多线程(一)线程安全问题产生的原因

JAVA线程内存与主存间映射示意图Java内存模型中规定了所有的变量都存储在主内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程的工作内存中保存了该线程使用的变量到主内存副本拷贝&#xff0c;线程对变量的所有操作&#xff08;读取、赋值&#xff09;都必须在工…

两顶点的路径长度为k_计算两个顶点之间的所有可能路径

两顶点的路径长度为kWhat to Learn? 学什么&#xff1f; How to count all possible paths between two vertices? 如何计算两个顶点之间的所有可能路径&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在图中&#xff0c;有许多从…

covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践

这是关于时间序列的第N篇文章&#xff0c;本文将介绍ARIMAX模型&#xff0c;简单来说就是在ARIMA的基础上增加一个外生变量。ARIMAX和ARIMA相比在理论上没有太多新的内容&#xff0c;所以本文直接介绍在R里怎么一步一步跑ARIMAX。在阅读这篇文章前&#xff0c;需要对ARIMA有一定…

linux系统编程之文件与I/O(六):fcntl 函数与文件锁

2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报分类&#xff1a;linux系统编程&#xff08;19&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 一、fcntl函数 功能&#xff1a;操纵文件描述符&#xff0c;改变已打开的文件的属性 int…

bandizip最后一个无广告版本_如果非要选择一款压缩软件的话——Bandizip

全世界只有不到0.00~1 % 的人关注了我们得到你的关注是小帮的幸运压缩解压软件是电脑一个必备软甲&#xff0c;前面的文章介绍了一款开源小巧无广告的压缩解压软件windows工具软件选择之压缩软件——7-Zip&#xff0c;如果有人用不惯的话可以试试今天的这款。Bandizip 是一款来…

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现

新人刚开始学习ASP.NET MVC&#xff0c;若有不足之处希望能得到您的指点&#xff0c;不胜感激&#xff01; 先来一张项目的层级结构图: Model&#xff1a;模型层&#xff0c;主要是各种类型、枚举以及ORM框架&#xff0c;框架完成数据库和实体类的映射。项目中选用了微软的开源…

mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器

1. 前言对于写Crud的老司机来说时间非常宝贵&#xff0c;一些样板代码写不但费时费力&#xff0c;而且枯燥无味。经常有小伙伴问我&#xff0c;胖哥你怎么天天那么有时间去搞新东西&#xff0c;透露一下秘诀呗。好吧&#xff0c;今天就把Mybatis-plus的代码生成器分享出来&…

c++ websocket客户端_websocket使用

websocket使用一、介绍在项目开发过程中&#xff0c;很多时候&#xff0c;我们不可避免的需要实现的一个功能&#xff1a; 服务端实时发送信息给客户端。比如实时公告、实时订单通知、实时报警推送等等&#xff0c;登录后的客户端需要知道与它相关的实时信息&#xff0c;以便进…

在cordova中使用HTML5的多文件上传

2019独角兽企业重金招聘Python工程师标准>>> 我们先看看linkface给开放的接口&#xff1a; 字段类型必需描述api_idstring是API 账户api_secretstring是API 密钥selfie_filefile见下方注释需上传的图片文件 1&#xff0c;上传本地图片进行检测时选取此参数selfie_ur…

linux常用命令和配置

2019独角兽企业重金招聘Python工程师标准>>> 启动php&#xff1a; /etc/init.d/php-fpm restart 查看PHP运行目录&#xff1a; which php /usr/bin/php 查看php-fpm进程数&#xff1a; ps aux | grep -c php-fpm 查看运行内存 /usr/bin/php -i|grep mem iptables如…

centos7时间同步_centos 8.x系统配置chrony时间同步服务

centos 8.x系统配置chrony时间同步服务CentOS 7.x默认使用的时间同步服务为ntp服务&#xff0c;但是CentOS 8开始在官方的仓库中移除了ntp软件&#xff0c;换成默认的chrony进行时间同步的服务&#xff0c;chrony既可以作为客户端向其他时间服务器发送时间同步请求&#xff0c;…

ICWAI和ICWA的完整形式是什么?

ICWAI / ICWA&#xff1a;印度成本与工程会计师协会/印度儿童福利法 (ICWAI / ICWA: Institute of Cost and Works Accountants of India / Indian Child Welfare Act) 1)ICWAI&#xff1a;印度成本与工程会计师协会 (1) ICWAI: Institute of Cost and Works Accountants of In…

crontab 日志_liunx 中定时清理过期日志文件

问题描述经常遇到日志文件过多&#xff0c;占用大量磁盘空间&#xff0c;需要定期删除过期日志。问题涉及方面删除过期日志的脚本。定时任务删除任务脚本先查询到过期的日志文件&#xff0c;然后删除。语法find path -option [ -print ] [ -exec -ok command ] …

将搜索二叉树转换为链表_将给定的二叉树转换为双链表(DLL)

将搜索二叉树转换为链表Given a Binary tree and we have to convert it to a Doubly Linked List (DLL). 给定二叉树&#xff0c;我们必须将其转换为双链表(DLL)。 Algorithm: 算法&#xff1a; To solve the problem we can follow this algorithm: 为了解决这个问题&#…