Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一篇文章学会Matplotlib

一篇文章学会Matplotlib

作者头像
GeekLiHua
发布于 2025-01-21 08:45:41
发布于 2025-01-21 08:45:41
91000
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

一篇文章学会Matplotlib

简介

本文通过大量案例,讲解Matplotlib的基础语法。

语法

以下是 Matplotlib 的常见语法:

  • 导入库:import matplotlib.pyplot as plt
  • 绘图:plt.plot(x, y)
    • xy都是数字列表或数组,指定了数据点的水平和垂直坐标值。
  • 显示绘图:plt.show()
  • 添加标签、标题及轴:
    • plt.xlabel('X Label')
    • plt.ylabel('Y Label')
    • plt.title('Title')
  • 自定义样式:
    • 线条颜色:'r'(红色)、'g'(绿色)、'b'(蓝色)
    • 点标记:'o'(圆形)、'^'(向上三角形)、's'(正方形)
    • 线型:'-'(实线)、'--'(虚线)
    • 线宽:linewidth=3
    • 标记尺寸:markersize=12
  • 定义子图:
    • 建立网格:fig, axs = plt.subplots(rows, cols)
    • 访问子图:axs[row][col]
    • 设置子图标题:axs[row][col].set_title('Title')
    • 在子图中绘制:‘axs[row][col].plot(x, y)’ 或 axs[row][col].bar(x, y)等。
  • 保存图像到文件:plt.savefig('file_name.png', dpi=300, bbox_inches='tight')
    • dpi定义每英寸的像素点数。
    • bbox_inches选项用于选择“紧凑”(tight)或“松散”(loose)布局
  • 其它常用:
    • plt.grid(True) 添加网格
    • plt.legend() 添加图例
    • plt.xticks() 设置x轴刻度的位置
    • plt.yticks() 设置y轴刻度的位置
    • plt.xlim() 设置x轴坐标范围
    • plt.ylim() 设置y轴坐标范围
    • plt.subplots_adjust() 调整子图之间的间距和边距。
    • 以下是更多的Matplotlib语法和细节:
  • 三维绘图: Matplotlib中还有许多用于创建3D图形的功能,其中最常见的是使用mplot3d工具包。导入的包名仍然是“mpl_toolkits.mplot3d”,并且可以在plt.subplots()函数中指定一个projection="3d"参数来将轴转换成3D。
  • 数据标准化: 在某些情况下,需要将数据规范化或者使其可视化。Matplotlib提供了一些方便快捷的API帮助您完成此项任务。例如,通过诸如plt.hist()plt.boxplot()之类的函数自动对数据进行标准化处理。
  • 支持数学表达式:Matplotlib能够支持Latex编写的数学表达式,只需在文本字符串前加一个“$”即可。
  • 将图表嵌入到GUI应用程序:将Matplotlib图表嵌入到Python GUI应用程序中是一种常见的用例。这可以通过在PyQt、Tkinter以及wxPython等GUI工具包中内置Matplotlib交互式API来实现。
  • 制定绘图风格:除了上面列出的样式选项之外,Matplotlib还提供了许多其他可调整的属性,例如背景颜色、网格线条宽度和填充等。可以通过定义matplotlibrc文件或动态配置选项来指定自定义样式。也可以在Python脚本中针对特定的图形组件直接访问这些属性并进行设置或更改。
  • 子图上的多行文本: 有时需要添加多行注释或标注,Matplotlib可以支持在子图上使用text()函数实现类似注释的目的。

讲解

绘制折线图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 8, 6, 4, 2]

plt.plot(x, y)  # 在坐标轴上绘制线条
plt.xlabel('X Label')  # 添加x轴标签
plt.ylabel('Y Label')  # 添加y轴标签
plt.title('Line Chart Example')  # 添加标题
plt.show()  # 显示图形

这个示例演示了如何使用Matplotlib绘制一个折线图。列表xy分别包含水平和垂直坐标数据,并使用plt.plot()函数连接它们以绘制线条。添加标题、坐标轴标签和刻度标签可以提高图表可阅读性。

绘制柱状图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt  #导入Matplotlib模块

x = ['A', 'B', 'C', 'D', 'E']  #定义横轴刻度标签
y = [10, 8, 6, 4, 2]  #定义纵轴数据值

plt.bar(x, y, width=0.5, align='center', color=['red', 'blue', 'green', 'purple', 'orange'])  #调用bar()函数创建柱状图,并指定参数
# 参数width为柱宽,默认为0.8;参数align为柱在标记上的对齐方式,默认为'edge'
# 在本例中,设置了柱的宽为0.5并居中对齐,同时也指定了每个条形的颜色。

plt.xlabel('Categories')  #添加x轴标题
plt.ylabel('Values')  #添加y轴标题
plt.title('Bar Chart Example')  #设置图表标题
plt.show()  #显示图表

这个示例演示了如何绘制一个垂直柱状图。x包含水平标签(类别),而y则包含垂直值。plt.bar()函数用于绘制它们,并提供了许多样式选项,如’width’、'align’和 ‘color’。

绘制散点图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt  #导入Matplotlib模块

x = [1, 2, 3, 4, 5]  #定义x轴数据
y = [10, 8, 6, 4, 2]  #定义y轴数据
colors = ['red', 'green', 'yellow', 'blue', 'purple']  #定义散点的颜色列表

plt.scatter(x, y, s=100, c=colors, marker='o', alpha=0.5)  
#调用scatter()函数创建散点图,并指定参数
# 参数s为散点的大小,默认为20;参数c为每个点的颜色;参数marker指定每个点形状(在此为圆);alpha参数设置点的透明度。

plt.xlabel('X Label')  #添加x轴标签
plt.ylabel('Y Label')  #添加y轴标签
plt.title('Scatter Plot Example')  #添加标题

plt.show()  #显示图表

这个示例演示了如何绘制一个简单的散点图。列表xy包含水平和垂直坐标数据,而colors列表则定义了用于每个数据点的颜色。使用plt.scatter()函数确定样式参数(如点的大小和形状),以及通过alpha参数调整点的透明度。

绘制饼图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt  #导入Matplotlib模块

labels = ['A', 'B', 'C', 'D']  #定义标签labels
data = [30, 20, 10, 40]  #定义数据
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']  #定义饼图显示区域颜色

plt.pie(data, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)  
#调用pie()函数创建饼图,并指定参数
# 参数labels为饼图中各部分的标签;参数colors给出了用于稳定饼图底色的四种颜色.
# 自动百分比句型说明每个区域占用的百分比;startangle指定旋转图表的起始角度。

plt.title('Pie Chart Example')  #设置图表标题
plt.show()  #显示图表

这个示例演示了如何绘制一个简单的饼图。plt.pie()函数用于绘制它,参数中包含数据列表’数据’和自动标签生成器’labels’。 还说明了其他一些如颜色(‘colors’)、筏车(‘startangle’)和值显示格式(‘autopct’)等选项。

绘制热力图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  #用numpy模块创建一个3x3的矩阵并赋值

heatmap = plt.pcolor(data, cmap=plt.cm.Blues)  #调用pcolor()方法为数据生成颜色热图,并传入自定义配色和颜色比例尺。
plt.colorbar()   #调用colorbar()方法给图表添加颜色条。

plt.xticks(np.arange(0.5, len(['A', 'B', 'C']) + 0.5), ['A', 'B', 'C'])  #设定x轴刻度、标签和范围
plt.yticks(np.arange(0.5, len(['D', 'E', 'F']) + 0.5), ['D', 'E', 'F'])  #设定y轴刻度、标签和范围

plt.title('Heatmap Example')  #设置图表标题
plt.show()  #显示图表

这个示例演示了如何绘制一个热力图。二维NumPy数组data存储数据,而’plt.pcolor()'函数用于创建矩阵颜色图。通过添加xticks()yticks()函数、并使用值范围(0.5- len + 0.5)调整刻度的位置。在此之上还展示了如何添加图例标签(使用plt.colorbar()函数来调用详细颜色条)。

绘制3D图形
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

# 定义一个新的3D坐标系
fig = plt.figure()  #生成一张新的图片
ax = fig.add_subplot(111, projection='3d')  #在其中增加一个子图,projection='3d'参数告诉Matplotlib要创建3D图像

# 生成XY的等间隔数字,并根据它们的组合生成Z
x = np.linspace(-1, 1, 100)  # 生成等间隔数字-11,共100个数值
y = np.linspace(-1, 1, 100)  # 同理
X, Y = np.meshgrid(x, y)  # 根据输入的两个分别一维的函数向量创建相应的二维矩阵用于3D图像的表面绘制
Z = np.sin(np.sqrt(X**2 + Y**2))  # 根据XY数组生成Z数组

# 在3D坐标系中绘制3D曲面
ax.plot_surface(X, Y, Z, cmap=plt.cm.Blues)  #调用plot_surface()方法和传入自定义配色,生成曲面图效果。
ax.set_xlabel('X Label')  #设置x轴标签
ax.set_ylabel('Y Label')  #设置y轴标签
ax.set_zlabel('Z Label')  #设置z轴标签
plt.title('3D Plot Example')  #设置图表标题
plt.show()  #显示图表

这个示例演示了如何创建简单的三维坐标系。第一个代码块定义了一个基础的3D坐标轴对象,然后根据linspace()函数的参数定义图形数据。使用’np.meshgrid()'生成相应的网格,并在采用sin()函数计算定义的图形Z值,最后绘制三维曲面并为其添加轴标签。

带注释的折线图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt  #导入Matplotlib模块

x = [1, 2, 3, 4, 5]  #定义x轴数据
y = [10, 8, 6, 4, 2]  #定义y轴数据

plt.plot(x, y)  #用plot()函数绘制折线图
plt.xlabel('X Label')  #设置x轴标签
plt.ylabel('Y Label')  #设置y轴标签
plt.title('Line Chart with Annotations')  #设置标题

# 打开交互模式并添加文本注释
plt.ion()   #打开交互模式
plt.annotate('Low point', xy=(4, 2), xytext=(3.5, 8),
             arrowprops=dict(facecolor='black', shrink=0.05)) 
# 在指定点(4, 2)处增加一条注释线,并给该行添加一个说明小箭头。
plt.annotate('Interesting Point', xy=(3, 6), xytext=(1.5, 9),
             arrowprops=dict(facecolor='red', shrink=0.05))
# 让注释点稍微偏离目标点坐标(3, 6),同时以红色为基调。

plt.show()  #展示图表结果

在这个示例中,除了在上一个示例中所看到的基础功能之外,这里展示了如何通过在图形上添加注释来增强Matplotlib图表。函数’anotate()用于往图表上添加箭头和注释文字(在此示例中,我们可在关键点进行注释)。 ion()`函数打开交互模式以允许实时进行比较底部和有趣的点的选取过程。

绘制多个子图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.linspace(0, 10, 100)  #创建线性空间数组,并精准地定义起始点、结束点和数量。
y1 = np.sin(x)  #根据 x 数组生成 y1 数据
y2 = np.cos(x)  #根据 x 数组生成 y2 数据

# 创建网格并放置两个子图
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)  
# 调用subplots()方法,创建两行一列的子图网格。sharex=True表示共享横坐标。

# 在第一个子图中绘制sin函数
ax1.plot(x, y1, 'r-', linewidth=2)  #调用plot()函数,在第一个子图中绘制sin函数,使用以红色为基调的单匹配线条。
ax1.set_ylabel('Sin')  #设置y轴标签

# 在第二个子图中绘制cos函数
ax2.plot(x, y2, 'g-', linewidth=2)  #调用plot()函数,在第二个子图中绘制cos函数,用以绿色为基调的单匹配线条。
ax2.set_xlabel('Time (s)')  #设置x轴标签
ax2.set_ylabel('Cos')  #设置y轴标签

# 添加标题
plt.suptitle('Example of Multiple Subplots')  #用suptitle()函数为整个图表添加一个标题

plt.show()  #显示图表

通过上面定义的subplots()函数和sharex = True 参数,可以创建具有多个子图的Matplotlib图表。 然后简单地在单独的子图中进行x和y轴标签的设置,然后添加一个总标题,以构建命令自己独立的图表。

导出Matplotlib图形
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.linspace(0, 10, 100)  #使用numpy模块中的np.linspace()函数生成一系列等间隔样本点
y = np.sin(x)

# 创建新的图形并绘制sin函数
fig = plt.figure()  #创建一个新的图形
plt.plot(x, y, 'r-', linewidth=2)  #用plot()函数在该图形上绘制以红色为基调的折线状图表
plt.xlabel('Time (s)')  #设置x轴标签
plt.ylabel('Amplitude')  #设置y轴标签
plt.title('Example of a Matplotlib Figure')  #设置标题

# 将图表保存成PDF文件
plt.savefig('example.pdf')  #使用savefig()函数将该图形以pdf格式保存

plt.show()  #展示图表结果

在多数情况下,如果要将Matplotlib图表嵌入到GUI应用程序中,则无需导出它至外部的文件。但是,将图表作为图像文件或数据可视化存储在挂网站上等情况,在确保输出效果如预期时,可能会需要输出图形。savefig() 函数直接调用图表实例,并传入目标格式的文件名,在本例中,就是PDF文件格式。

这些示例演示了Matplotlib的核心API语法和基础功能配置项,足以使您能够开始从零构建一张完美呈现化的图表。当然,Matplotlib提供更高级的功能和选项,需要仔细理解文档,针对开发任务切换您所需要的关键字参数并进行进一步探索。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
由一次渗透测试引发的HTTP请求走私思考
前几天朋友发了一个朋友圈说他的网站刚建好没有多久就被别人给脱库了,里面有一些客户的资料,有点难受。便向他询问了一些事情,溯源无果后便和他商量了一下帮助他将再次新建的网站进行了一次友情渗透测试。而HTTP请求走私漏洞也是在其中发现的一个可以小事化大,大事化危的一个漏洞。遂将其发现过程记录下来
谢公子
2022/01/20
9520
由一次渗透测试引发的HTTP请求走私思考
请求走私利用实践(上)
在上次的"Websocket通信安全概览"一文中对WebSocket的请求走私做了一个简单的介绍后总觉得对请求走私这一部分知识内容缺乏一个完整性的梳理,后面经过几次断断续续的补充以及时间的拼凑最终有了这一篇较为完整的关于请求走私的介绍文章和利用实践文章,而这也算是填补了自己之前遗留的一个坑吧
Al1ex
2024/01/26
4320
请求走私利用实践(上)
请求走私利用实践(下)
假设应用程序使用前端服务器来实现访问控制限制,仅当用户被授权访问所请求的URL时才转发请求,然后后端服务器接受每个请求,而不做进一步的检查,在这种情况下可以利用HTTP请求走私漏洞通过请求走私访问受限制的URL从而绕过访问控制,假如允许当前用户访问/home,但不允许访问/admin,他们可以使用以下请求走私攻击绕过这一限制:
Al1ex
2024/01/26
2440
请求走私利用实践(下)
HTTP2请求走私(上)
HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,它由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发,该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论并于2015年2月17日被批准,目前多数主流浏览器已经在2015年底支持了该协议,此外根据W3Techs的统计数据表示自2017年5月,在排名前一千万的网站中有13.7%支持了HTTP/2,本篇文章我们将主要对HTTP/2协议的新特性以及HTTP/2中的请求走私进行详细介绍
Al1ex
2024/02/01
3010
HTTP2请求走私(上)
HTTP2请求走私(下)
网站即使采取措施阻止基本H2.CL或H2.TE攻击(例如:验证content-length或剥离任何transfer-encoding头),我们也可以通过利用HTTP/2的二进制格式中允许的一些方法来绕过这些前端措施,在HTTP/1中我们有时可以利用服务器处理独立换行符(\n)方式之间的差异来走私被禁止的头
Al1ex
2024/02/01
4180
HTTP2请求走私(下)
[ffffffff0x] 浅析 HTTP Smuggling 攻击
由于各种各样的原因,各网站通常使用多级代理模式对外开放Web服务,如CDN、Nginx代理等。HTTP/1.1 版本倾向于使用keep-alive长连接进行通信,提高前后端之间的通讯效率。也就是说多个人的流量可能会在前后端之间的同一个tcp会话中传输,另外前后端对于Content-Length和Transfer-Encoding的解析处理方法不同,有可能造成请求污染的情况,直接导致HTTP Smuggling攻击的出现。
r0fus0d
2020/12/27
1K0
[ffffffff0x] 浅析 HTTP Smuggling 攻击
协议层的攻击——HTTP请求走私
最近在学习研究BlackHat的议题,其中有一篇议题——"HTTP Desync Attacks: Smashing into the Cell Next Door"引起了我极大地兴趣,在其中,作者讲述了HTTP走私攻击这一攻击手段,并且分享了他的一些攻击案例。我之前从未听说过这一攻击方式,决定对这一攻击方式进行一个完整的学习梳理,于是就有了这一篇文章。
知道创宇云安全
2019/10/11
2K0
协议层的攻击——HTTP请求走私
非侵入式入侵 —— Web缓存污染与请求走私
本文介绍了两种攻击者无需直接接触服务端即可攻击和影响用户行为的安全漏洞 —— Web缓存污染与请求走私。Web缓存污染旨在通过攻击者向缓存服务器投递恶意缓存内容,使得用户返回响应结果而触发安全风险。HTTP请求走私旨在基于前置服务器(CDN、反向代理等)与后置服务器对用户请求体的长度判断标准不一致的特性,构造能够被同一TCP连接中其它用户夹带部分恶意内容的攻击请求,从而篡改了受害者的请求与响应行为。两种漏洞均需要通过针对中间件的合理配置与业务接口的合理设计进行排查和防御。
2020labs小助手
2023/03/14
6000
请求走私利用扩展
在之前我们介绍了HTTP/1和HTTP/2的请求走私原理以及利用方法,本篇文章将对此进行进一步扩展介绍一些特殊的场景下的请求走私的检测以及利用方式和思路,对请求走私进行一个扩展补充,例如:CL.0请求走私、H2.0走私、去同步化攻击等,同时本篇文章也是对请求走私系列的最后一个收官,至此请求之前留下的请求走私的坑也算是被填完了
Al1ex
2024/02/22
3640
请求走私利用扩展
初探HTTP请求走私
文章首发于跳跳糖社区https://tttang.com/archive/1808/
用户9691112
2023/05/18
2K0
初探HTTP请求走私
Web Security 之 CSRF
在本节中,我们将解释什么是跨站请求伪造,并描述一些常见的 CSRF 漏洞示例,同时说明如何防御 CSRF 攻击。
凌虚
2021/03/19
2.5K0
Web Security 之 CSRF
Web Security 之 HTTP Host header attacks
在本节中,我们将讨论错误的配置和有缺陷的业务逻辑如何通过 HTTP Host 头使网站遭受各种攻击。我们将概述识别易受 HTTP Host 头攻击的网站的高级方法,并演示如何利用此方法。最后,我们将提供一些有关如何保护自己网站的一般建议。
凌虚
2021/03/19
6.4K0
Web Security 之 HTTP Host header attacks
基于select IO复用的HTTP服务器(十一)
没想到距离上篇文章才过去仅仅半个多月就发生了这么多的事情,其之沉、其之重、其之殇,如氤氲般笼罩环绕在这片古老的大地上。钟南山眼中的泪水让我没有丝毫的心情再在文章中随手写段子,白衣天使们脸上的疲倦让我没有了任何像以往那种调侃方式写文章的感觉。可能你们不太会适应失去了段子的本公号,但是只要哪天钟佬说“ 可以了 ”,我立马就恢复如初。
老李秀
2020/02/19
1.2K0
CTF中的请求走私
HTTP请求走私是一种干扰网站处理从一个或多个用户接收的HTTP请求序列方式的技术,它允许攻击者绕过安全控制获得对敏感数据的未经授权的访问并直接危害其他应用程序用户,请求走私大多发生于前端服务器和后端服务器对客户端传入的数据理解不一致的情况,主要是因为HTTP规范提供了两种不同的方法来指定请求的结束位置,即Content-Length和Transfer-Encoding标头,请求走私主要与HTTP/1请求相关,但是支持HTTP/2的网站可能容易受到攻击,具体取决于其后端架构,本篇文章我们主要介绍一些CTF中常见的请求走私题目并对请求走私的利用实现一个强化效果
Al1ex
2024/01/22
3130
CTF中的请求走私
rfc7230 Message Syntax and Routing
HTTP使用.来标识协议版本。本规范定义的版本为"1.1"。版本号表示发送端遵从对应HTTP版本的实现需求。
charlieroro
2020/03/24
1K0
Responses 部分
(3)HTTP/1.1: URI(Uniform Resource Identifier,统一资源标识符)及其版本
翎野君
2023/05/12
2960
Responses 部分
Smuggler:一款功能强大的HTTP请求走私和去同步安全测试工具
Smuggler是一款功能强大的HTTP请求走私和去同步安全测试工具,该工具基于纯Python 3开发,可以帮助广大研究人员针对应用程序的HTTP协议执行安全分析和测试。
FB客服
2024/03/01
3300
Smuggler:一款功能强大的HTTP请求走私和去同步安全测试工具
Web Security 之 CORS
在本节中,我们将解释什么是跨域资源共享(CORS),并描述一些基于 CORS 的常见攻击示例,以及讨论如何防御这些攻击。
凌虚
2021/03/03
1.5K0
从项目实际问题引发的思考
现在有一个 Web 项目,前端是使用 Vue.js 开发的,整个前端需要部署到 K8S 上,后端和前端分开,同样也需要部署到 K8S 上,因此二者需要打包为 Docker 镜像。
崔庆才
2019/12/11
5820
netty对http协议解析原理解析
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能。 1 http协议 1.1 描述 标示
xiangzhihong
2018/02/05
3.4K0
netty对http协议解析原理解析
相关推荐
由一次渗透测试引发的HTTP请求走私思考
更多 >
交个朋友
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验