Matplotlib 绘图艺术:从新手到高手的全面指南
引言
在数据科学和机器学习领域,数据可视化是一项至关重要的技能。一个优秀的可视化图表可以直观地展示数据的内在规律,帮助我们更好地理解数据,并做出更明智的决策。而在众多的绘图库中,Matplotlib 是 Python 中最强大、最灵活的绘图工具之一。无论你是数据科学家、工程师还是研究人员,掌握 Matplotlib 的基本绘图技巧都是必不可少的。
本文将带你从零开始,逐步了解 Matplotlib 的核心概念、基本语法,并通过丰富的实例和实战案例,帮助你快速上手并精通 Matplotlib 的基本绘图技术。无论你是初学者还是有经验的开发者,都能在这篇文章中找到有价值的内容。
基础语法介绍
什么是 Matplotlib?
Matplotlib 是一个用于创建高质量图表和图形的 Python 库。它最初由 John D. Hunter 在 2002 年开发,旨在为 Python 提供一个类似于 MATLAB 的绘图接口。经过多年的不断发展和完善,Matplotlib 已经成为 Python 生态系统中最受欢迎的绘图库之一。
核心概念
在使用 Matplotlib 进行绘图时,有几个核心概念需要了解:
- Figure:整个绘图区域,可以包含一个或多个子图(Axes)。
- Axes:具体的绘图区域,每个 Axes 对象可以包含多个绘图元素,如线条、标签、图例等。
- Axis:坐标轴,负责绘制刻度和标签。
- Artist:所有可见的绘图元素,如线条、文本、图例等,都是 Artist 的子类。
基本语法规则
Matplotlib 提供了两种主要的绘图方式:面向对象的方式和pyplot 接口。面向对象的方式更加灵活和强大,而 pyplot 接口则更加简洁易用。
面向对象的方式
import matplotlib.pyplot as plt
import numpy as np# 创建一个 Figure 对象和一个 Axes 对象
fig, ax = plt.subplots()# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制图形
ax.plot(x, y)
ax.set_title('Sine Wave')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')# 显示图形
plt.show()
pyplot 接口
import matplotlib.pyplot as plt
import numpy as np# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制图形
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')# 显示图形
plt.show()
基础实例
问题描述
假设我们有一组时间序列数据,表示某个传感器在一段时间内的温度变化。我们希望绘制这组数据的折线图,以便直观地观察温度的变化趋势。
代码示例
import matplotlib.pyplot as plt
import numpy as np# 生成数据
time = np.linspace(0, 24, 100) # 一天的时间,单位为小时
temperature = 20 + 10 * np.sin(np.pi * time / 12) # 模拟温度变化# 绘制图形
plt.figure(figsize=(10, 6))
plt.plot(time, temperature, label='Temperature', color='blue', linestyle='-', marker='o', markersize=5)
plt.title('Temperature Change Over Time')
plt.xlabel('Time (hours)')
plt.ylabel('Temperature (°C)')
plt.legend()
plt.grid(True)
plt.show()
代码解释
np.linspace(0, 24, 100):生成从 0 到 24 小时的 100 个等间距时间点。20 + 10 * np.sin(np.pi * time / 12):模拟温度变化,假设温度在一天内周期性变化。plt.figure(figsize=(10, 6)):创建一个新的 Figure 对象,并设置其大小为 10 英寸宽、6 英寸高。plt.plot(time, temperature, label='Temperature', color='blue', linestyle='-', marker='o', markersize=5):绘制折线图,设置标签、颜色、线型、标记和标记大小。plt.title('Temperature Change Over Time'):设置图形的标题。plt.xlabel('Time (hours)')和plt.ylabel('Temperature (°C)'):设置 x 轴和 y 轴的标签。plt.legend():显示图例。plt.grid(True):显示网格线。plt.show():显示图形。
进阶实例
问题描述
假设我们有一个包含多个变量的数据集,我们希望在一个图形中同时绘制这些变量的变化趋势,并添加图例和注释,以便更好地解释数据。
高级代码实例
import matplotlib.pyplot as plt
import numpy as np# 生成数据
time = np.linspace(0, 24, 100) # 一天的时间,单位为小时
temperature = 20 + 10 * np.sin(np.pi * time / 12) # 温度变化
humidity = 50 + 20 * np.cos(np.pi * time / 12) # 湿度变化# 绘制图形
plt.figure(figsize=(12, 8))# 绘制温度曲线
plt.plot(time, temperature, label='Temperature', color='blue', linestyle='-', marker='o', markersize=5)# 绘制湿度曲线
plt.plot(time, humidity, label='Humidity', color='green', linestyle='--', marker='x', markersize=7)# 添加注释
plt.annotate('Highest Temperature', xy=(12, 30), xytext=(15, 35),arrowprops=dict(facecolor='black', shrink=0.05))# 设置图形属性
plt.title('Temperature and Humidity Change Over Time')
plt.xlabel('Time (hours)')
plt.ylabel('Value')
plt.legend()
plt.grid(True)# 显示图形
plt.show()
代码解释
plt.plot(time, humidity, label='Humidity', color='green', linestyle='--', marker='x', markersize=7):绘制湿度曲线,设置标签、颜色、线型、标记和标记大小。plt.annotate('Highest Temperature', xy=(12, 30), xytext=(15, 35), arrowprops=dict(facecolor='black', shrink=0.05)):在图形中添加注释,指向最高温度点。- 其他部分与基础实例类似,不再赘述。
实战案例
问题描述
假设我们在一个电商平台上收集了一段时间内的用户购买数据,包括用户的购买时间和购买金额。我们希望分析用户的购买行为,并绘制出每日购买金额的分布图,以便更好地了解用户的购买习惯。
解决方案
我们可以使用 Matplotlib 绘制柱状图来展示每日购买金额的分布情况。通过这种方式,我们可以直观地看到哪些日子的购买金额较高,从而为营销策略提供依据。
代码实现
import matplotlib.pyplot as plt
import pandas as pd# 读取数据
data = pd.read_csv('user_purchases.csv')# 数据预处理
data['date'] = pd.to_datetime(data['purchase_time']).dt.date
daily_purchases = data.groupby('date')['amount'].sum()# 绘制柱状图
plt.figure(figsize=(12, 6))
plt.bar(daily_purchases.index, daily_purchases.values, color='skyblue')# 设置图形属性
plt.title('Daily Purchase Amount Distribution')
plt.xlabel('Date')
plt.ylabel('Purchase Amount ($)')
plt.xticks(rotation=45)
plt.tight_layout()# 显示图形
plt.show()
代码解释
pd.read_csv('user_purchases.csv'):读取用户购买数据。data['date'] = pd.to_datetime(data['purchase_time']).dt.date:将购买时间转换为日期格式。daily_purchases = data.groupby('date')['amount'].sum():按日期分组,计算每日购买金额的总和。plt.bar(daily_purchases.index, daily_purchases.values, color='skyblue'):绘制柱状图,设置颜色。plt.xticks(rotation=45):旋转 x 轴标签,防止重叠。plt.tight_layout():自动调整布局,使图形更美观。
扩展讨论
自定义样式
Matplotlib 提供了丰富的自定义选项,可以通过 rcParams 来全局设置图形的样式。例如,可以设置默认的字体、颜色、线宽等。
import matplotlib.pyplot as plt# 设置全局样式
plt.rcParams['font.size'] = 14
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['axes.labelsize'] = 16
plt.rcParams['axes.titlesize'] = 18
plt.rcParams['xtick.labelsize'] = 14
plt.rcParams['ytick.labelsize'] = 14# 绘制图形
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]plt.plot(x, y)
plt.title('Customized Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
保存图形
除了在屏幕上显示图形外,Matplotlib 还支持将图形保存为多种格式的文件,如 PNG、PDF、SVG 等。
import matplotlib.pyplot as plt# 绘制图形
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]plt.plot(x, y)
plt.title('Saved Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')# 保存图形
plt.savefig('saved_plot.png', dpi=300)
动态更新图形
在某些应用场景中,我们可能需要实时更新图形,例如监控系统的状态。Matplotlib 提供了 FuncAnimation 类来实现动态更新图形。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation# 初始化数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图形
fig, ax = plt.subplots()
line, = ax.plot(x, y)# 更新函数
def update(frame):line.set_ydata(np.sin(x + frame / 10.0))return line,# 创建动画
ani = FuncAnimation(fig, update, frames=np.arange(0, 100), blit=True)# 显示图形
plt.show()
总结
通过本文的介绍,相信你已经对 Matplotlib 的基本绘图有了较为全面的了解。无论是简单的折线图、柱状图,还是复杂的动态图形,Matplotlib 都能为你提供强大的支持。
如果你有任何疑问或建议,欢迎在评论区留言交流。祝你在数据可视化的道路上越走越远!
相关文章:
Matplotlib 绘图艺术:从新手到高手的全面指南
引言 在数据科学和机器学习领域,数据可视化是一项至关重要的技能。一个优秀的可视化图表可以直观地展示数据的内在规律,帮助我们更好地理解数据,并做出更明智的决策。而在众多的绘图库中,Matplotlib 是 Python 中最强大、最灵活的…...
[ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-windows)
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
SQLI LABS | Less-33 GET-Bypass AddSlashes()
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-33/ "Ad…...
界面控件DevExpress WPF中文教程:Data Grid——卡片视图设置
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
flink 内存配置(一):设置Flink进程内存
flink 内存配置(一):设置Flink进程内存 flink 内存配置(二):设置TaskManager内存 flink 内存配置(三):设置JobManager内存 flink 内存配置(四)…...
贪心算法习题其三【力扣】【算法学习day.20】
前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...
速盾:高防cdn针对网站的好处有哪些?
高防CDN(Content Delivery Network)是一种网络分发技术,它能够提供可靠的网站高防护服务,有效地解决了网站遭受DDoS攻击、恶意流量等网络安全问题。高防CDN的应用已经变得越来越广泛,对于网站的好处也变得越发明显。 …...
【Java SE语法】抽象类(abstract class)和接口(interface)有什么异同?
目录 1. 抽象类与接口的基本概念 1.1 抽象类 1.2 接口 2. 抽象类与接口的异同 2.1 相同点 2.2 不同点 3. 拓展知识:多态与设计模式 3.1 多态 3.2 设计模式 4. 结论 在软件工程中,设计模式和代码结构的选择对于构建可维护、可扩展的系统至关重要…...
京准同步:GPS北斗卫星授时服务器发展趋势介绍
京准同步:GPS北斗卫星授时服务器发展趋势介绍 京准同步:GPS北斗卫星授时服务器发展趋势介绍 GPS北斗卫星授时服务器的发展趋势紧密围绕着不断提升的时间同步精度、可靠性、安全性,以及适应广泛应用场景的需求展开,以下是卫星授时…...
鸿蒙多线程开发——并发模型对比(Actor与内存共享)
1、概 述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发:指异步代码在执行到一定程度后会被…...
【计算机网络】章节 知识点总结
一、计算机网络概述 1. 计算机网络向用户提供的两个最重要的功能:连通性、共享 2. 因特网发展的三个阶段: 第一阶段:从单个网络 ARPANET 向互联网发展的过程。1983 年 TCP/IP 协议成为 ARPANET 上的标准协议。第二阶段:建成三级…...
开箱即用!265种windows渗透工具合集--灵兔宝盒
【渗透工具箱】灵兔宝盒-Rabbit_Treasure_Box_V1.0.1 介绍 Rabbit_Treasure_Box_V1.0.1是一款Windows渗透工具箱,集成Dawn Launcher管理,便捷备份更新。内含脚本工具及在线安全工具,覆盖信息收集、漏洞利用、逆向破解、蓝队防御等多领域&am…...
怎么在哔哩哔哩保存完整视频
哔哩哔哩(B站)作为一个集视频分享、弹幕互动于一体的平台,吸引了大量用户。许多人希望能够将自己喜欢的完整视频保存到本地,以便离线观看或分享。直接下载视频的功能并不总是可用,因此,本文将介绍几种在哔哩哔哩上保存完整视频的方…...
CPU算法分析LiteAIServer视频智能分析平台视频智能分析:抖动、过亮与过暗检测技术
随着科技的飞速发展,视频监控系统在各个领域的应用日益广泛。然而,视频质量的好坏直接影响到监控系统的效能,尤其是在复杂多变的光照条件下和高速数据传输中,视频画面常常出现抖动、过亮或过暗等问题,导致监控视频难以…...
fastGPT调用stable diffusion生成图片,本地模型使用ollama
ps:192.168.1.100换成你的ip 一、开器stable diffusion的api访问 Git上copy的项目,在启动web-ui.bat/sh时加上--api的启动参数. /web-ui.bat --api我这里使用的stabble-diffusion-docker构建的默认就开启了 http://192.168.1.100:7860/docs 二…...
【jmeter】jmeter的线程组功能的详细介绍
初衷 之前在公司做的性能测试基本上都是关于数据库的,针对接口的性能测试还是比较少一点。考虑到后边大模型问答产品的推广,公司方面也要求对相关接口进行压测,也趁着这个机会,对jmeter进行深入研究,进一步加强自己性…...
高边坡安全监测系统的工作原理和应用领域
高边坡安全监测系统的工作原理主要依赖于各种先进的传感器设备,这些传感器能够实时地捕捉和记录边坡的位移、应力、裂缝、倾斜和沉降等多种关键数据。这些数据的采集是通过高精度的监测设备进行的,确保了数据的准确性和可靠性。采集到的数据随后通过高效…...
Java:多态的调用
1.什么是多态 允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用…...
A day a tweet(seventeen)——Visualize Convolution Neural Network!
a.形象化地CNNs visually explained! . .CNN(Convolution Neural Network) 卷积神经网络 a.不可思议的,难以置信的 v.使形象化CNN explainer is an incredible interactive tool to visualize the internal workings of a CNN. n.解释器;讲解员 …...
卡达掐发展史
自行车是一种简单而又伟大的交通工具。自从19世纪诞生以来,它不仅改变了人们的出行方式,也深刻地影响了我们的生活方式、城市布局以及健康观念。作为一种绿色、经济的出行工具,自行车至今仍在全球范围内被广泛使用。本文将从自行车的历史、结…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
基于小程序老人监护管理系统源码数据库文档
摘 要 近年来,随着我国人口老龄化问题日益严重,独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长,随之而来的是日益突出的老年人问题,尤其是老年人的健康问题,尤其是老年人产生健康问题后&…...
