Matplotlib 绘图实践:从基础到高级技巧【第62篇—python:Matplotlib绘图】

文章目录

  • Matplotlib绘图模块基础入门大全
    • 1. 安装Matplotlib
    • 2. 绘制基本图形
    • 3. 自定义图形样式
    • 4. 多子图布局
    • 5. 高级绘图技巧
    • 6. 绘制实时动态图
    • 7. 图形注释与标记
    • 8. 颜色映射与散点图
    • 9. 绘制直方图
    • 10. 绘制饼图
    • 11. 绘制热力图
  • 总结

Matplotlib绘图模块基础入门大全

Matplotlib是一个强大的Python绘图库,用于创建各种类型的静态、动态和交互式图表。本篇博客将介绍Matplotlib的基础知识,包括绘制简单图形、自定义图形样式、多子图布局以及一些高级绘图技巧。我们将通过丰富的代码实例和案例来帮助读者深入理解Matplotlib的使用方法。

1. 安装Matplotlib

在开始之前,首先确保你已经安装了Matplotlib。如果没有安装,可以使用以下命令进行安装:

pip install matplotlib

2. 绘制基本图形

首先,我们来绘制一些基本的图形,比如折线图、散点图和柱状图。以下是一个简单的例子:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制折线图
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 添加标题和图例
plt.title('Sin and Cos Functions')
plt.legend()

# 显示图形
plt.show()

这段代码使用NumPy生成了一个包含100个点的x轴数据,并分别计算了这些点对应的sin和cos值,然后使用plt.plot()函数绘制了折线图。通过plt.title()plt.legend()函数,我们添加了标题和图例。

image-20240205145630355

3. 自定义图形样式

Matplotlib允许用户自定义图形的样式,包括线型、颜色、标记等。下面是一个自定义样式的例子:

# 绘制散点图
plt.scatter(x, y1, color='blue', marker='o', label='sin(x)')

# 绘制柱状图
plt.bar(x, y2, color='green', alpha=0.7, label='cos(x)')

# 添加标题和图例
plt.title('Scatter and Bar Plot')
plt.legend()

# 显示图形
plt.show()

在这个例子中,我们使用plt.scatter()plt.bar()函数分别绘制了散点图和柱状图,通过设置colormarkeralpha等参数进行样式的自定义。

4. 多子图布局

Matplotlib支持在同一图中创建多个子图,可以使用plt.subplot()函数来实现。以下是一个包含多个子图的例子:

# 创建一个2x2的子图布局
plt.subplot(2, 2, 1)
plt.plot(x, y1, label='sin(x)')
plt.legend()

plt.subplot(2, 2, 2)
plt.scatter(x, y1, color='red', marker='o', label='sin(x)')
plt.legend()

plt.subplot(2, 2, 3)
plt.plot(x, y2, label='cos(x)')
plt.legend()

plt.subplot(2, 2, 4)
plt.bar(x, y2, color='purple', alpha=0.7, label='cos(x)')
plt.legend()

# 调整布局
plt.tight_layout()

# 显示图形
plt.show()

在这个例子中,我们使用plt.subplot()创建了一个2x2的子图布局,并在每个子图中绘制不同的图形。

image-20240205145725068

5. 高级绘图技巧

Matplotlib还提供了一些高级绘图技巧,比如3D绘图、图形注释和颜色映射等。以下是一个简单的3D绘图例子:

from mpl_toolkits.mplot3d import Axes3D

# 生成3D数据
theta = np.linspace(0, 2*np.pi, 100)
z = np.linspace(0, 1, 100)
r = z**2 + 1

# 创建3D图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制3D线图
ax.plot3D(r * np.cos(theta), r * np.sin(theta), z, label='3D Spiral')

# 添加标题和图例
plt.title('3D Spiral Plot')
plt.legend()

# 显示图形
plt.show()

在这个例子中,我们使用mpl_toolkits.mplot3d模块创建了一个3D图形,并通过ax.plot3D()函数绘制了3D螺旋线。

image-20240205145818273

6. 绘制实时动态图

Matplotlib也支持绘制实时动态图,通过不断更新数据和图形来展示动态变化。以下是一个简单的动态图例子:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation

# 初始化数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 创建画布和坐标轴
fig, ax = plt.subplots()
line, = ax.plot(x, y, label='Dynamic Sin(x)')

# 更新函数,每一帧更新数据
def update(frame):
    line.set_ydata(np.sin(x + frame / 10))  # 更新y轴数据
    return line,

# 创建动画
animation = FuncAnimation(fig, update, frames=100, interval=50)

# 添加标题和图例
plt.title('Dynamic Sin(x) Plot')
plt.legend()

# 显示动画
plt.show()

这个例子中,我们使用FuncAnimation类创建了一个动画对象,并通过update函数在每一帧更新数据,从而实现动态效果。

image-20240205145843745

7. 图形注释与标记

Matplotlib允许在图形上添加注释和标记,以更清晰地传达信息。以下是一个添加注释和标记的例子:

# 绘制带注释的图形
plt.plot(x, y1, label='sin(x)')
plt.scatter([2*np.pi], [0], color='red', marker='o')  # 在特定点添加散点标记

# 添加文本注释
plt.annotate('Peak', xy=(2*np.pi, 0), xytext=(2*np.pi+1, 0.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )

# 添加标题和图例
plt.title('Annotated Sin(x) Plot')
plt.legend()

# 显示图形
plt.show()

在这个例子中,我们使用plt.scatter()在图中的特定点添加了一个红色的散点标记,并使用plt.annotate()函数在该点添加了文本注释。

8. 颜色映射与散点图

Matplotlib支持使用颜色映射(colormap)来更好地呈现数据分布。以下是一个使用颜色映射的散点图例子:

# 生成数据
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
sizes = 100 * np.random.rand(100)

# 创建散点图,并使用颜色映射和不同大小的标记
plt.scatter(x, y, c=colors, s=sizes, cmap='viridis', alpha=0.7)

# 添加颜色条
plt.colorbar()

# 添加标题
plt.title('Colormap Scatter Plot')

# 显示图形
plt.show()

在这个例子中,我们通过c参数指定颜色映射的数据,通过s参数指定散点的大小,并使用plt.colorbar()添加了颜色条。

通过这篇博客,你已经学到了Matplotlib的基础知识,包括绘制基本图形、自定义样式、多子图布局、实时动态图、图形注释与标记、颜色映射与散点图等方面的技巧。希望这些例子对你更深入地理解Matplotlib并应用于实际项目中有所帮助。

9. 绘制直方图

直方图是用于展示数据分布的常用图形,Matplotlib提供了plt.hist()函数用于绘制直方图。以下是一个简单的直方图例子:

# 生成随机数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

# 添加标题和标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 显示图形
plt.show()

在这个例子中,我们使用np.random.randn()生成了包含1000个随机数的数据集,并使用plt.hist()函数绘制了直方图。通过bins参数可以调整直方图的柱子数量,color参数设置填充颜色,edgecolor参数设置柱子边框颜色。

10. 绘制饼图

饼图是用于展示数据占比的图形,Matplotlib提供了plt.pie()函数用于绘制饼图。以下是一个简单的饼图例子:

# 生成数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [25, 30, 20, 25]

# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, colors=['lightcoral', 'lightskyblue', 'lightgreen', 'gold'])

# 添加标题
plt.title('Pie Chart of Categories')

# 显示图形
plt.show()

在这个例子中,我们使用labelssizes定义了饼图的标签和占比数据,并使用plt.pie()函数绘制了饼图。通过autopct参数可以显示百分比标签,startangle参数设置饼图的起始角度,colors参数设置各部分的颜色。

11. 绘制热力图

热力图是用于展示矩阵数据的图形,Matplotlib提供了plt.imshow()函数用于绘制热力图。以下是一个简单的热力图例子:

# 生成随机矩阵数据
data = np.random.rand(10, 10)

# 绘制热力图
plt.imshow(data, cmap='viridis', interpolation='nearest')

# 添加颜色条
plt.colorbar()

# 添加标题
plt.title('Heatmap of Random Data')

# 显示图形
plt.show()

在这个例子中,我们使用np.random.rand()生成了一个10x10的随机矩阵,并使用plt.imshow()函数绘制了热力图。通过cmap参数可以选择颜色映射,interpolation参数设置插值方式,plt.colorbar()添加颜色条。

通过这些例子,你可以学到Matplotlib中绘制直方图、饼图和热力图的方法,这些图形在数据分析和可视化中经常被使用。希望这些例子能够帮助你更全面地掌握Matplotlib的功能。

image-20240205145910978

总结

在这篇博客中,我们深入探讨了Matplotlib这一强大的Python绘图库的基础知识和高级技巧。首先,我们学习了Matplotlib的安装方法,然后通过丰富的代码实例展示了如何绘制折线图、散点图、柱状图等基本图形。随后,我们深入研究了如何自定义图形样式,包括线型、颜色、标记等的设置。

通过多子图布局的介绍,我们了解了如何在同一画布上创建多个子图,以更灵活地呈现多个图形。接着,我们探讨了Matplotlib的实时动态图绘制,展示了通过FuncAnimation实现的动态效果,使图形更具交互性。

在图形注释与标记的部分,我们学会了如何在图中添加注释、标记和文本,以提高图形的可读性。颜色映射与散点图的例子展示了如何通过颜色来传达数据信息,使得图形更富有层次感。

进一步,我们介绍了直方图的绘制方法,用于展示数据分布,以及饼图和热力图的应用,这些图形在数据可视化中有着广泛的应用。

总体而言,Matplotlib为我们提供了强大的工具,能够应对各种数据可视化的需求。通过深入学习和实践,我们能够更灵活、更美观地呈现数据,使得数据分析和展示更加生动有趣。希望这篇博客能够成为初学者和进阶者们学习Matplotlib的良好起点,激发更多关于数据可视化的探索与创新。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字符串哈希模版(来自TsReaper)

有一个字符串word,让你求出某一段所对应的数值(即映射值),word[L,R]对应的数值。

【LeetCode: 239. 滑动窗口最大值 + 滑动窗口 + 单调队列】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

rhel8静态ip配置

1.先cd进来 2.把默认的dhcp改成static IPADDR192.168.211.22 22随意改,255以下的数字都行,1和255不要用 GATEWAY192.168.211.2和虚拟机默认网关保持一致 重启网络 nmcli c reload和 nmcli c up ens160 ping百度测试--(成功了&#xff0…

dnslog在sql盲注

首先必须保证sql是在windows下 因为需要使用到UNC路径 保证mysql中的secure_file_priv为空 secure_file_priv为null,load_file则不能加载文件。 secure_file_priv为路径,可以读取路径中的文件; secure_file_priv为空,可以读取磁盘…

ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

maven-install-plugin:2.4:install (default-cli) on project ability-dispatch:

IDEA,instal时报错 ,错误 信息如下: Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project ability-dispatch: The packaging for this project did not assign a file to the buil…

javaEE - 24( 20000 字 Servlet 入门 -2 )

一: Servlet API 详解 1.1 HttpServletResponse Servlet 中的 doXXX 方法的目的就是根据请求计算得到相应, 然后把响应的数据设置到HttpServletResponse 对象中. 然后 Tomcat 就会把这个 HttpServletResponse 对象按照 HTTP 协议的格式, 转成一个字符串, 并通过S…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

情人节浪漫礼物指南:精选共享甜蜜时光的情人节礼物推荐

情人节,代表着浪漫和爱意的纪念日,总能激起每个人内心深处的悸动,促使他们渴望与爱侣共度美好时刻。为爱人精心选择一份情人节礼物,不仅是对他们深情的告白,更是将这份爱升华,让它成为两人爱情故事里的宝贵…

C# Winform NLog的使用笔记

一、NLog的介绍 NLog是一个开源的、灵活的、可扩展的日志记录库,用于.NET平台。它提供了强大的日志记录功能,可以帮助开发人员在应用程序中实现高效的日志记录和跟踪。它提供了一种简单且灵活的方式来在应用程序中记录日志信息。NLog支持多种日志目标&am…

计算机设计大赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数:2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题,简简单单的列表,查询MongoDB数据库,测试环境不过几百上千条数据而已,请求耗时居然高达5~6秒: 作为对比,生产环境的请求响应截图如下&…

机器学习中的有监督学习和无监督学习

有监督学习 简单来说,就是人教会计算机学会做一件事。 给算法一个数据集,其中数据集中包含了正确答案,根据这个数据集,可以对额外的数据希望得到一个正确判断(详见下面的例子) 回归问题 例如现在有一个…

【算法】枚举——蓝桥杯、日期统计、特殊日期(位数之和)、2023、特殊日期(倍数)、跑步锻炼

文章目录 蓝桥杯日期统计特殊日期(位数之和)2023特殊日期(倍数)跑步锻炼 蓝桥杯 日期统计 日期统计 如果暴力枚举100个数的八次循环那就是1016次运算,时间复杂度太高了,好在前四次的2023是确定的&#xf…

【实用原创】20个Python自动化脚本,解放双手、事半功倍

在当今的快节奏工作环境中,自动化不再是一种奢侈,而是提高效率和精确性的必需手段。Python,以其易于学习和强大的功能而闻名,成为实现各种自动化任务的理想选择。无论是数据处理、报告生成,还是日常的文件管理&#xf…

如何配置SSH实现无公网ip远程连接访问Deepin操作系统

📑前言 本文主要是配置SSH实现无公网ip远程连接访问Deepin操作系统的文章,如果有什么需要改进的地方还请大佬指出⛺️** 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &…

06 MP之自动填充+SQL执行的语句和速度分析

1. 自动填充 在项目中有一些属性,比如常见的创建时间和更新时间可以设置为自动填充。 1.1 实例 需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段 1.1.1 在数据库增加字段 默认开启驼峰映射 createTime --> create_time…

Linux环境下的基本指令

最便捷Linux环境就是用云服务器,下载一个远程终端软件进行操作即可。 远程终端软件这里我比较推荐XShell软件,下载官网https://www.netsarang.com/products/xsh_overview.html 下载安装的时候选择 "home/school" 则为免费版本。 查看 Linux …

加速大规模商业化!量子信息公司Infleqtion收购两家集成硅光子公司

​内容来源:量子前哨(ID:Qforepost) 编辑丨慕一 编译/排版丨卉可 沛贤 深度好文:1200字丨10分钟阅读 近期,美国量子信息公司Infleqtion宣布成功收购两家集成硅光子公司:SiNoptiq公司和Morton…

从小白到入门webrtc音视频通话

0. 写在前面 先会骑车,再研究为什么这么骑,才是我认为学习技术的思路,底部付了demo例子,根据例子上面的介绍即可运行。 1. 音视频通话要用到的技术简介 websocket 介绍:1. 服务器可以向浏览器推送信息;2…