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世纪诞生以来,它不仅改变了人们的出行方式,也深刻地影响了我们的生活方式、城市布局以及健康观念。作为一种绿色、经济的出行工具,自行车至今仍在全球范围内被广泛使用。本文将从自行车的历史、结…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...