当前位置: 首页 > news >正文

Python Matplotlib库:从入门到精通

Python Matplotlib库:从入门到精通

在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法,通过具体的代码示例和详细说明,让你轻松实现数据可视化。

1. Matplotlib图表的主要组成部分

Matplotlib图表主要由以下几个部分组成:

  1. Figure:整个图形,可以把它理解成一张画布,包括了所有的元素,比如标题、轴线等。
  2. Axes:绘制2D图像的实际区域,也称为轴域区,或者绘图区。
  3. Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小、轴标签和刻度标签。
  4. Artist:画布上所有元素都属于Artist对象,比如文本对象(title、xlabel、ylabel)、Line2D对象(用于绘制2D图像)等。

在开始绘图之前,首先需要安装Matplotlib库。如果尚未安装,可以使用以下命令进行安装:

pip install matplotlib

2. 基础图表绘制

2.1 折线图(Line Plot)

折线图用于显示数据随时间或其他连续变量的变化趋势。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib# 指定默认字体为支持中文的字体,例如 SimHei
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题# 创建示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 创建一个图形
plt.figure(figsize=(10, 6))# 绘制线图
plt.plot(x, y1, label='正弦', color='red', linewidth=2)
plt.plot(x, y2, label='余弦', color='blue', linewidth=2, linestyle='--')# 添加标题和标签
plt.title('正弦和余弦函数')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()  # 显示图例
plt.grid(True)  # 显示网格plt.show()

请添加图片描述

2.2 散点图(Scatter Plot)

散点图用于显示两个变量之间的关系。

import matplotlib.pyplot as plt
import numpy as np# 创建示例数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)# 绘制散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
plt.colorbar(label='颜色强度')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('散点图示例')plt.show()

请添加图片描述

3. 多子图绘制

在同一个窗口中绘制多个子图是一个常见需求。

import matplotlib.pyplot as plt
import numpy as np# 创建示例数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]# 创建2x2的子图
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(12, 8))# 子图1: 柱状图
ax1.bar(categories, values)
ax1.set_title('柱状图')# 子图2: 折线图
ax2.plot(categories, values, 'r-o')
ax2.set_title('折线图')# 子图3: 散点图
ax3.scatter(categories, values)
ax3.set_title('散点图')# 子图4: 饼图
ax4.pie(values, labels=categories, autopct='%1.1f%%')
ax4.set_title('饼图')# 调整子图间距
plt.tight_layout()
plt.show()

请添加图片描述

4. 统计图表绘制

4.1 直方图(Histogram)

直方图用于显示数据的分布情况。

import matplotlib.pyplot as plt
import numpy as np# 创建示例数据
np.random.seed(42)
data = np.random.randn(1000)# 创建一个图形,包含多个子图
fig = plt.figure(figsize=(15, 5))# 子图1: 直方图
plt.subplot(131)
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('直方图')
plt.xlabel('值')
plt.ylabel('频次')# 后续可添加箱线图和小提琴图等统计图表...plt.tight_layout()
plt.show()

请添加图片描述

4.2 箱线图(Boxplot)和小提琴图(Violinplot)

箱线图和小提琴图也是常用的统计图表,用于展示数据的分布特征。

# 接着上面的代码,继续添加箱线图和小提琴图# 子图2: 箱线图
plt.subplot(132)
plt.boxplot(data)
plt.title('箱线图')# 子图3: 小提琴图
plt.subplot(133)
plt.violinplot(data)
plt.title('小提琴图')plt.tight_layout()
plt.show()

请添加图片描述

5. 高级绘图技巧

5.1 3D图表绘制

Matplotlib还支持3D图表的绘制。

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 创建3D图形
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')# 绘制3D曲面
surface = ax.plot_surface(X, Y, Z, cmap='viridis')
fig.colorbar(surface)
ax.set_title('3D曲面图')plt.show()

请添加图片描述

6. 实战案例:数据分析可视化

以下是一个实际的数据分析可视化案例,用于展示Matplotlib的实用性。

import matplotlib.pyplot as plt
import numpy as np# 创建销售数据
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales_a = [100, 120, 140, 130, 150, 160]
sales_b = [90, 110, 130, 140, 145, 155]# 创建组合图表
fig, ax1 = plt.subplots(figsize=(10, 6))# 绘制柱状图
x = np.arange(len(months))
width = 0.35
ax1.bar(x - width/2, sales_a, width, label='产品A', color='skyblue')
ax1.bar(x + width/2, sales_b, width, label='产品B', color='lightgreen')# 设置坐标轴
ax1.set_xticks(x)
ax1.set_xticklabels(months)
ax1.set_ylabel('销售量')
ax1.set_title('月度销售对比')
ax1.legend()# 添加数据标签
for i, v in enumerate(sales_a):ax1.text(i - width/2, v, str(v), ha='center', va='bottom')
for i, v in enumerate(sales_b):ax1.text(i + width/2, v, str(v), ha='center', va='bottom')plt.show()

请添加图片描述

7. 设置中文

在使用 Matplotlib 显示汉字时,需要进行一些设置以确保汉字能够正确显示。以下是一些关键步骤:

  1. 设置字体
    Matplotlib 默认不支持中文字符,因此需要指定一个支持中文的字体。常见的中文支持字体有“SimHei”(黑体)、“SimSun”(宋体)等。你可以通过设置 rcParams 来指定字体。

  2. 确保字体文件存在
    指定的字体必须存在于你的系统中。在某些操作系统(如 Linux)上,可能需要手动安装相应的字体。

  3. 代码示例
    下面是一个简单的示例代码,展示如何在 Matplotlib 中显示汉字:

import matplotlib.pyplot as plt
import matplotlib# 指定默认字体为支持中文的字体,例如 SimHei
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题# 示例数据
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]# 创建图表
plt.figure()
plt.plot(x, y)
plt.title('示例图表')
plt.xlabel('横轴标签')
plt.ylabel('纵轴标签')# 显示图表
plt.show()
  1. 其他字体设置
    如果你的系统中没有 SimHei 字体,或者你想使用其他字体,可以指定字体文件的路径。例如:
from matplotlib.font_manager import FontProperties# 指定字体文件路径
font_path = '/path/to/your/chinese/font.ttf'  # 替换为你的字体文件路径
font = FontProperties(fname=font_path)# 使用指定的字体创建文本
plt.text(2, 20, '使用指定字体显示的汉字', fontproperties=font)
  1. 保存图表时显示汉字
    当保存图表为图片文件时,同样需要确保字体设置正确。上面的 rcParams 设置已经涵盖了这一点,但如果你使用的是其他保存方法,确保字体设置一致。
# 保存图表
plt.savefig('example_chart.png')

通过本文的介绍,相信你已经对Matplotlib有了全面的了解,并能够运用它来实现各种数据可视化需求。从基础图表到高级绘图技巧,再到实战案例,Matplotlib都展现出了其强大的功能和灵活性。希望本文能够对你的学习和工作有所帮助!

相关文章:

Python Matplotlib库:从入门到精通

Python Matplotlib库:从入门到精通 在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法&…...

线程概念、操作

一、背景知识 1、地址空间进一步理解 在父子进程对同一变量进行修改时发生写时拷贝,这时候拷贝的基本单位是4KB,会将该变量所在的页框全拷贝一份,这是因为修改该变量很有可能会修改其周围的变量(局部性原理)&#xf…...

【PySide6拓展】QSoundEffect

文章目录 【PySide6拓展】QSoundEffect 音效播放类**基本概念****什么是 QSoundEffect?****QSoundEffect 的特点****安装 PySide6** **如何使用 QSoundEffect?****1. 播放音效****示例代码:播放音效** **代码解析****QSoundEffect 的高级用法…...

33【脚本解析语言】

脚本语言也叫解析语言 脚本一词,相信很多人都听过,那么什么是脚本语言,我们在开发时有一个调试功能,但是发布版是需要编译执行的,体积比较大,同时这使得我们每次更新都需要重新编译,客户再…...

【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)

更新日期:2025年1月23日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 开发编辑器工具MouseRayTarget焦点视角Collider线框Assembly Viewer搜索程序集ILSpy反编译程序集搜索GizmosElement类找到Gizmos菜单找到Gizmos窗口分析A…...

如何解决TikTok网络不稳定的问题

TikTok是目前全球最受欢迎的短视频平台之一,凭借其丰富多彩的内容和社交功能吸引了数以亿计的用户。然而,尽管TikTok在世界范围内的使用情况不断增长,但不少用户在使用过程中仍然会遇到网络不稳定的问题。无论是在观看视频时遇到缓冲&#xf…...

告别页面刷新!如何使用AJAX和FormData优化Web表单提交

系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…...

WireShark4.4.2浏览器网络调试指南:数据统计(八)

概述 Wireshark 是一款功能强大的开源网络协议分析软件,被广泛应用于网络调试和数据分析。随着互联网的发展,以及网络安全问题日益严峻,了解如何使用 Wireshark进行浏览器网络调试显得尤为重要。最新的 Wireshark4.4.2 提供了更加强大的功能…...

Hypium+python鸿蒙原生自动化安装配置

Hypiumpython自动化搭建 文章目录 Python安装pip源配置HDC安装Hypium安装DevEco Testing Hypium插件安装及使用方法​​​​​插件安装工程创建区域 Python安装 推荐从官网获取3.10版本,其他版本可能出现兼容性问题 Python下载地址 下载64/32bitwindows安装文件&am…...

2025创业思路和方向有哪些?

创业思路和方向是决定创业成功与否的关键因素。以下是一些基于找到的参考内容的创业思路和方向,旨在激发创业灵感: 一、技术创新与融合: 1、智能手机与云电视结合:开发集成智能手机功能的云电视,提供通讯、娱乐一体化体…...

实验五---控制系统的稳定性分析---自动控制原理实验课

一 实验目的 1、理解控制系统稳定性的概念 2、掌握多种判定系统稳定性的原理及方法 3、掌握使用Matlab软件进行控制系统的稳定性分析 二 实验仪器 计算机,MATLAB仿真软件 三 实验内容及步骤 1.计算系统闭环特征根,判别系统稳定性; 2.绘制系统…...

AttributeError: can‘t set attribute ‘lines‘

报错: ax p3.Axes3D(fig) ax.lines [] AttributeError: cant set attribute lines 总结下来,解决方案应包括: 1. 使用ax.clear()方法清除所有内容。 2. 逐个移除lines中的元素。 3. 检查matplotlib版本,确保没有已知的bug。…...

Day07:缓存-数据淘汰策略

Redis的数据淘汰策略有哪些 ? (key过期导致的) 在redis中提供了两种数据过期删除策略 第一种是惰性删除,在设置该key过期时间后,我们不去管它,当需要该key时,我们再检查其是否过期,如果过期&…...

基于聚类与相关性分析对马来西亚房价数据进行分析

碎碎念:由于最近太忙了,更新的比较慢,提前祝大家新春快乐,万事如意!本数据集的下载地址,读者可以自行下载。 1.项目背景 本项目旨在对马来西亚房地产市场进行初步的数据分析,探索各州的房产市…...

Java—工具类类使用

工具类的调用:工具类名.方法名 工具类的书写: 示例: 写一个遍历数组的工具类 import java.util.Arrays;public class ArrayUtil {private ArrayUtil() {} //用私有化构造方法不让外界创建关于它的对象//定义static静态方法,因…...

游戏开发领域 - 游戏引擎 UE 与 Unity

游戏引擎 游戏引擎是用于开发电子游戏的软件框架,它提供图形渲染、物理模拟、音频处理、动画系统、脚本编写等功能,帮助开发者高效创建电子游戏 但是,游戏引擎也不仅限于游戏开发,还广泛应用于其他领域,例如&#xff…...

[NVME] PMRCAP-Persistent Memory Region Capabilities

This register indicates capabilities of the Persistent Memory Region(持久内存区域) If the controller does not support the Persistent Memory Region feature, then this register shall be cleared to 0h BitsTypeResetDescription31:25RO 0hReserved24ROImpl Spec…...

Ollama windows安装

Ollama 是一个开源项目,专注于帮助用户本地化运行大型语言模型(LLMs)。它提供了一个简单易用的框架,让开发者和个人用户能够在自己的设备上部署和运行 LLMs,而无需依赖云服务或外部 API。这对于需要数据隐私、离线使用…...

vim操作简要记录

操作容易忘记,记录一下基本使用的 :wq保存退出 :w :q :q! :wq! i I a A 方向键 h左 j下 k上 l右 dd删除方行(这其实是剪切行操作,不过一般用作删除,长按可删除,不过按.执行上一次操作删除更快) .执行上…...

车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...