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

news2024/11/20 7:09:30

文章目录

  • 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的良好起点,激发更多关于数据可视化的探索与创新。

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

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

相关文章

RabbitMQ-1.介绍与安装

介绍与安装 1.RabbitMQ1.0.技术选型1.1.安装1.2.收发消息1.2.1.交换机1.2.2.队列1.2.3.绑定关系1.2.4.发送消息 1.2.数据隔离1.2.1.用户管理1.2.3.virtual host 1.RabbitMQ 1.0.技术选型 消息Broker,目前常见的实现方案就是消息队列(MessageQueue&…

深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言引言内存计算体系结构深度神经网络(DNN)随机梯度的优…

搭建自己的私服 maven 仓库

申明:本文章所使用docker-compose配置文件纯属学习运用,非商用如有雷同请联系本人协调处理。 一、配置docker-compose.yml文件 # 指定docker-compose的版本 version: 3 services: nexus: container_name: nexus_container image: sonatype/nex…

扩展鸿蒙ArkUI日期组件

鸿蒙ArkUI日期组件使用的是DatePickerDialog.show基础上扩展的表单式输入组件,方便在输入日期方式快速使用及复用。 /*** 日期*/ Component export default struct DiygwDate{//绑定的值Link Watch(onValue) value:string;// 隐藏值State valueField: string valu…

【机器学习】某闯关类手游用户流失预测

Final Project: 某闯关类手游用户流失预测 1 案例简介 手游在当下的日常娱乐中占据着主导性地位,成为人们生活中放松身心的一种有效途径。近年来,各种类型的手游,尤其是闯关类的休闲手游,由于其对碎片化时间的利用取得了非常广泛…

Sui上TVL突破5亿美元,位列DeFi榜单前十名和最活跃链前五名

2023年Sui上DeFi协议迅速增长,2024年这一势头仍在继续,根据DeFiLlama报告Sui上TVL近期超过5亿美元。在不到一年的时间里就达到这个金额,得益于Sui的突破性指标,比如其峰值TPS接近6,000。 Sui TVL突破5亿美元,登上DeFi…

使用VASPKIT生成非整数倍扩胞结构

在计算某些任务时需要根据原胞进行非对称或者根号倍扩胞,使用vaspkit可以构建一个扩胞倍数矩阵,这样可以获得特定方向非整数倍的扩胞结构。 这里使用的命令为vaspkit的400模块 注意400的命令会让你连续输入三行,每行都需要三个数值&#xff0…

Android 数据恢复电脑版免费下载使用方法 [2024 更新]

“我一直在寻找一款可以下载的适用于 PC 的优秀 Android 数据恢复软件。有很多,但大部分都需要我付费。你能推荐一个好的让我免费下载吗?” 奇客数据恢复安卓版是恢复已删除或丢失的 Android 数据的最安全的工具。免费下载下面的奇客数据恢复安卓版来尝试…

开始使用 Cortex-M 微控制器:ARM Cortex-M 架构介绍

ARM Cortex-M 架构是一种专为微控制器设计的处理器架构,致力于提供低功耗、高性能和成本效益的解决方案。本文将介绍ARM Cortex-M 架构的特点、核心部件以及常见的应用场景,并提供示例代码来演示使用Cortex-M 微控制器。 ✅作者简介:热爱科研…

js中this对象的理解(深度解析)

文章目录 一、定义二、绑定规则默认绑定隐式绑定new绑定显示修改 三、箭头函数四、优先级隐式绑定 VS 显式绑定new绑定 VS 隐式绑定new绑定 VS 显式绑定 参考文献 一、定义 函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模…

板块零 IDEA编译器基础:第二节 创建JAVA WEB项目与IDEA基本设置 来自【汤米尼克的JAVAEE全套教程专栏】

板块零 IDEA编译器基础:第二节 创建JAVA WEB项目与IDEA基本设置 一、创建JAVA WEB项目(1)普通项目升级成WEB项目(2)创建JAVA包 二、IDEA 开荒基本设置(1)设置字体字号自动缩放 (2&am…

如何对视频进行翻译

下载视频和翻译软件 视频和翻译软件点击下载就行了,下载之后解压,然后把两个exe点一下。接下来如果资金充裕或者要求比较高的可以使用各个api,网站里有视频介绍了。 经济适用视频翻译 原理简析 首先这个软件对视频的翻译的流程大致如下&a…

普通编程,机器学习与深度学习

普通编程:基于人手动设置规则,由输入产生输出经典机器学习:人手工指定需要的特征,通过一些数学原理对特征与输出的匹配模式进行学习,也就是更新相应的参数,从而使数学表达式能够更好的根据给定的特征得到准…

(二)hadoop搭建

1. 下载 访问https://hadoop.apache.org/releases.html查看hadoop最新下载地址 wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz 2.解压 tar zxvf hadoop-3.3.4.tar.gz mv hadoop-3.3.4 /usr/local 3.配置环境变量(新建.sh文件&…

IDEA创建SpringBoot+Mybatis-Plus项目

IDEA创建SpringBootMybatis-Plus项目 一、配置Maven apache-maven-3.6.3的下载与安装(详细教程) 二、创建SpringBoot项目 在菜单栏选择File->new->project->Spring Initializr,然后修改Server URL为start.aliyun.com&#xff0c…

TOP100-二叉数

1.94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入&#xf…

提升你的PHP开发效率:探索JetBrains PhpStorm 2022的全新特性

在当今快速发展的软件开发领域,选择一个强大且高效的开发工具对于提升开发效率、保证代码质量至关重要。对于PHP开发者来说,JetBrains PhpStorm一直是市场上最受欢迎的IDE之一。随着JetBrains PhpStorm 2022的发布,这款工具带来了一系列创新功…

springboot 集成 nacos (demo 版)

环境要求:本地安装 nacos(windows版本),jdk 是 8,安装完还得在 nacos 上面配置一个 yaml 类型的配置文件,方便项目演示读取。 提示:如标题所示,本文只介绍如何从零到一的去集成 naco…

进程状态、排队

进程状态 1. 进程排队2. 进程各个状态3. 查看一个进程的状态4. linux内核描述进程状态5. 孤儿进程 1. 进程排队 进程为什么要排队呢?答案就是资源不够。需要等待某个软硬件资源,就像我们常用的scanf函数就是等待键盘资源。 之前的文章我们有个结论&#…

【SpringBoot】策略和模板模式的思考与实践

一、应用场景 之所以会将策略和模板模式放在一起,是因为这两种模式用的最多最广泛,而且基本都是联合使用的。在开始之前,先复习一下模式的定义: 模板模式(Template Pattern) 模板模式是在一个抽象类中定…