一、Matplotlib 基础认知

1.1 库功能与定位

  • 核心作用:将数据可视化展示,提升数据直观性与说服力
  • 应用场景:绘制折线图、饼图、柱状图等 2D/3D 图表
  • 双接口模式
    • MATLAB 风格:通过pyplot函数快速绘图(自动管理图形对象)
    • 面向对象:显式创建Figure和Axes对象(适合复杂绘图)

1.2 核心对象架构

  • 容器类:图 (Figure)、坐标系 (Axes)、坐标轴 (Axis)、刻度 (Tick)
  • 基础类:线条、文本、图例、网格、标题等

1.3 环境搭建

 

# 安装命令

pip install matplotlib

# 验证安装

import matplotlib.pyplot as plt

print(plt.__name__) # 输出:matplotlib.pyplot

二、Pyplot 绘图基础

2.1 核心函数速查表

功能分类

常用函数

说明

图形控制

figure()

创建空白图形

show()

显示图形

savefig()

保存图形到文件

子图管理

subplot(nrows, ncols, index)

在网格中添加子图

subplots(rows, cols)

创建子图矩阵

subplot2grid(shape, loc)

非等分网格布局

元素设置

xlabel()/ylabel()

设置坐标轴标签

title()/suptitle()

设置子图 / 总图标题

legend()

添加图例

绘图函数

plot()

绘制折线图

bar()/hist()

绘制柱状图 / 直方图

scatter()/pie()

绘制散点图 / 饼图

2.2 图形与子图操作

2.2.1 基础图形创建
 

# 创建8x4英寸、120dpi、深灰色背景的图形

plt.figure(figsize=(8, 4), dpi=120, facecolor='darkgray')

2.2.2 网格子图布局
 

# 方法1:subplot直接创建

plt.subplot(2, 2, 1) # 2行2列第1个子图

plt.subplot(2, 2, 2, polar=True) # 极坐标子图

# 方法2:subplots批量创建

fig, ax = plt.subplots(2, 2)

ax[0, 0].bar(['C', 'C++', 'Java'], [12, 34, 45], color='r')

2.2.3 灵活子图布局
 

# 非等分网格(3x3布局)

plt.subplot2grid((3, 3), (0, 0), colspan=2) # 占据第1行前2列

plt.subplot2grid((3, 3), (1, 0), rowspan=2, colspan=2) # 占据第2-3行前2列

plt.subplot2grid((3, 3), (0, 2), rowspan=3) # 占据第1-3行第3列

plt.tight_layout() # 自动调整子图间距

三、可视化样式配置

3.1 绘图属性设置

3.1.1 颜色方案
  • 字符表示:'b'(蓝)、'g'(绿)、'r'(红)、'k'(黑)
  • RGB 表示:'#008000'(绿色)、'#FF5733'(橙色)
  • 灰度值:'0.8'(浅灰)、'0.2'(深灰)
3.1.2 线条样式

符号

样式

示例

'-'

实线

plt.plot(x, y, '-')

'--'

虚线

plt.plot(x, y, '--')

'-.'

点划线

plt.plot(x, y, '-.'

':'

点线

plt.plot(x, y, ':')

3.1.3 标记符号
 

# 常用标记示例

plt.plot(x, y, marker='o') # 圆圈

plt.scatter(x, y, marker='^') # 上三角

plt.plot(x, y, marker='s') # 正方形

plt.scatter(x, y, marker='*') # 星形

3.2 中文显示方案

 

# 方案1:全局字体设置

plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体

plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题

# 方案2:局部字体设置

plt.xticks(fontproperties='Times New Roman', size=10)

plt.title('标题', fontproperties='SimSun') # 宋体标题

四、2D 图表实战

4.1 折线图系列

4.1.1 单序列折线图
 

import pandas as pd

# 数据读取与处理

df = pd.read_excel('user_analysis.xlsx')

df.dropna(axis=0) # 移除空值行

# 绘图核心代码

plt.plot(df['时间'], df['新关注人数'])

plt.title('公众号每日新增用户数')

plt.xlabel('日期')

plt.ylabel('新增人数')

plt.xticks(rotation=45) # 倾斜x轴标签防重叠

plt.show()

4.1.2 多序列对比图
 

# 绘制双序列折线图

plt.plot(df['新关注人数'],

marker='o', markersize=5, markerfacecolor='mediumpurple')

plt.plot(df['取消关注人数'],

marker='o', markersize=5, markerfacecolor='orangered')

# 图例与标签设置

plt.legend(['新关注人数', '取消关注人数'], loc='upper center')

plt.xlabel('日期')

plt.ylabel('人数')

4.1.3 堆积折线图
 

df = pd.read_excel('mobile_phone.xlsx')

# 绘制堆积效果

plt.stackplot(df['品牌'], df['6月'], df['7月'], df['8月'], df['9月'])

# 图表美化

plt.legend(['6月销量', '7月销量', '8月销量', '9月销量'])

plt.title('手机品牌销量趋势堆积图')

plt.ylim(0, 1500) # 设置y轴范围

4.2 散点图应用

4.2.1 基础散点图
 

# 样本数据

age = [34, 40, 37, 30, 44, 36, 32, 26, 32, 36]

income = [350, 450, 169, 189, 183, 80, 166, 120, 75, 40]

sales = [123, 114, 135, 139, 117, 121, 133, 140, 133, 133]

# 绘制带气泡大小的散点图

plt.scatter(age, sales,

c=np.random.randint(0, 50, 10), # 随机颜色

marker='o', alpha=0.9, # 透明度

edgecolors='red', linewidths=0.3, # 边框样式

s=income) # 气泡大小与收入正相关

4.2.2 分组散点图
 

df = pd.read_excel('next_budget.xlsx')

men = df[df['gender']=='男性']

women = df[df['gender']=='女性']

# 分组绘制

plt.scatter(men['age'], men['next_budget'],

s=35, c='steelblue', label='男性')

plt.scatter(women['age'], women['next_budget'],

s=35, c='red', label='女性')

# 标签与图例

plt.legend()

plt.title('年龄与购车预算分布')

4.3 柱状图系列

4.3.1 并列柱状图
 

import numpy as np

x = np.arange(4)

y1 = np.random.randint(20, 50, 4) # 销售A组数据

y2 = np.random.randint(20, 50, 4) # 销售B组数据

# 并列绘制(偏移0.1防止重叠)

plt.bar(x-0.1, y1, width=0.2, label='销售A组')

plt.bar(x+0.1, y2, width=0.2, label='销售B组')

# 刻度与标签

plt.xticks(x, ['Q1', 'Q2', 'Q3', 'Q4'])

plt.legend()

4.3.2 堆积柱状图
 

x = np.arange(4)

y1 = np.random.randint(20, 50, 4) # 底层数据

y2 = np.random.randint(10, 60, 4) # 堆叠数据

# 堆积实现(bottom参数指定底层数据)

plt.bar(x, y1, width=0.4, label='销售A组')

plt.bar(x, y2, width=0.4, bottom=y1, label='销售B组')

# 图表设置

plt.legend(loc='lower right')

plt.title('季度销售额堆积图')

4.4 饼图与环形图

4.4.1 标准饼图
 

data = np.random.randint(100, 500, 7) # 随机销售额数据

labels = ["裙子", "毛衣", "牛仔裤", "T恤", "袜子", "配件", "短裤"]

# 绘制带百分比的饼图

plt.pie(data,

autopct='%.1f%%', # 显示百分比

explode=[0.05, 0, 0.1, 0, 0, 0, 0], # 突出显示部分区域

colors=np.random.rand(7, 3), # 随机颜色

startangle=90) # 起始角度

plt.title('服装销售额占比分析')

plt.legend(labels)

4.4.2 环形图实现
 

# 方案1:饼图改造法

fig, ax = plt.subplots(figsize=(6, 6))

ax.pie([87, 13],

wedgeprops={'width':0.3}, # 控制环宽(0.3表示内径70%)

startangle=90,

colors=['#5DADE2', '#515A5A'])

# 中心文本标注

plt.text(0, 0, "87%", ha='center', va='center', fontsize=42)

plt.title('全球通电率统计')

五、高级可视化图表

5.1 热力图

 

import numpy as np

# 生成6x5随机数据矩阵

data = np.random.randint(70, 100, (6, 5))

# 绘制热力图

plt.imshow(data, cmap='coolwarm') # 冷暖色调映射

# 坐标轴标签设置

plt.xticks(range(5), ["A指标", "B指标", "C指标", "D指标", "E指标"])

plt.yticks(range(6), [f'产品{i+1}' for i in range(6)])

# 添加颜色条

plt.colorbar()

plt.title('6个产品的五个指标热力图')

5.2 雷达图

 

import numpy as np

# 地区与指标数据

province = ["湖北", "广东", "湖南", "江西", "云南"]

index1 = [4.5, 4.9, 3.9, 2.8, 2.6, 4.5] # 首尾重复以闭合

index2 = [4.9, 4.7, 4.5, 3.9, 3.8, 4.9]

# 极坐标设置

plt.subplot(polar=True)

theta = np.linspace(0, 2*np.pi, len(index1)) # 圆周等分

# 绘制双序列雷达图

plt.plot(theta, index1)

plt.fill(theta, index1, 'm', alpha=0.1) # 填充区域

plt.plot(theta, index2)

# 图例与标题

plt.legend(['产品1', '产品2'], loc='best')

plt.title('区域产品竞争力雷达图')

5.3 箱线图

 

import numpy as np

# 生成含离群点的数据

data = np.random.randint(0, 100, 47)

data = np.append(data, [160, 200, -50]) # 添加离群点

# 绘制箱线图

plt.boxplot(data,

whis=1.5, # 离群点判定阈值

showmeans=True, # 显示均值

notch=True) # 凹口显示

# 坐标轴设置

plt.ylim([-100, 250])

plt.title('数据分布箱线图')

plt.xticks([1], ['测试数据'])

六、3D 图形绘制

6.1 3D 散点图

 

import numpy as np

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d') # 创建3D坐标系

# 生成三组随机数据

x = np.random.rand(100)

y = np.random.rand(100)

z = np.random.rand(100)

# 绘制散点图

ax.scatter(x, y, z, marker='o', color='red')

# 坐标轴标签

ax.set_xlabel('X')

ax.set_ylabel('Y')

ax.set_zlabel('Z')

6.2 3D 柱状图

 

import numpy as np

x = np.arange(8) # X轴坐标

layers = 5 # 柱状图层数

# 生成层叠数据

np.random.seed(10)

heights = np.random.randint(1, 5, (layers, 8)).cumsum(axis=0)

# 3D绘图

fig = plt.figure(figsize=(12, 8))

ax = fig.add_subplot(111, projection='3d')

# 分层绘制柱状图

for layer_idx in range(layers):

ax.bar3d(x, layer_idx*10, np.zeros(8),

dx=0.7, dy=8, dz=heights[layer_idx],

color=plt.cm.viridis(layer_idx/layers))

6.3 3D 曲面图

 

import numpy as np

from matplotlib import cm

# 生成网格数据

X = np.arange(-10, 10, 0.05)

Y = np.arange(-10, 10, 0.05)

X, Y = np.meshgrid(X, Y)

R = np.sqrt(X**2 + Y**2)

Z = np.sin(R) # 曲面函数

# 3D曲面绘制

fig = plt.figure()

ax = plt.axes(projection='3d')

surf = ax.plot_surface(X, Y, Z,

cmap=cm.cool, # 颜色映射

shade=True,

linewidth=0)

# 颜色条与坐标轴设置

fig.colorbar(surf, shrink=0.5, aspect=5)

ax.set_zlim(-1, 1)

七、词云图绘制

7.1 基础词云

 

from wordcloud import WordCloud

# 读取文本

text = open("speak.txt", encoding="gbk").read()

# 生成词云

wc = WordCloud(

background_color="white",

width=1000,

height=660

).generate(text)

# 显示词云

plt.imshow(wc, interpolation='bilinear')

plt.axis("off")

7.2 中文词云(含分词)

 

import jieba

# 读取中文文本

text = open("党的二十大报告.txt", encoding="gbk").read()

# 文本预处理

text = re.sub(r'[,。!?、()“”\n]', '', text) # 去除标点

words = jieba.cut(text) # 中文分词

# 去除停用词

stopwords = set(['的', '和', '在', '是', '了'])

filtered_words = [word for word in words if word not in stopwords]

text = ' '.join(filtered_words)

# 生成词云

wc = WordCloud(font_path='SIMLI.TTF').generate(text)

7.3 蒙版词云

 

from PIL import Image

import numpy as np

# 读取蒙版图片

mask = np.array(Image.opge.open("mask.png"))

# 生成带蒙版的词云

wc = WordCloud(

mask=mask,

font_path='SIMLI.TTF',

mode="RGBA",

background_color=None

).generate(text)

# 从蒙版提取颜色

from wordcloud import ImageColorGenerator

image_colors = ImageColorGenerator(mask)

wc.recolor(color_func=image_colors)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIC控制器(一)

目录 处理器工作模式 异常源 ​编辑寄存器组织结构 异常处理流程 CPSR寄存器 异常向量表 编写异常向量表 CP15协处理器 CP15 协处理器寄存器分组 协处理器指令 C0寄存器 C1寄存器 C12寄存器 C15寄存器 CBAR寄存器 Reset异常 前言: GIC(G…

深入解析RS485通信:从原理到Linux驱动开发实践

深入解析RS485通信:从原理到Linux驱动开发实践在工业控制、智能建筑和物联网领域,RS485凭借其强大的抗干扰能力和多节点组网特性,成为长距离可靠通信的首选方案。本文将带您深入理解RS485的核心技术。一、RS485通信技术解析 1.1 RS485与RS232…

Linux系统常用性能分析运维命令

分类命令描述CPU性能分析相关命令mpstat -P ALL 5监控所有CPU的使用情况,间隔5秒后输出一组数据。用于查看是否出现某个CPU占满的情况CPU性能分析相关命令pidstat -u 5 1监控所有进程的CPU使用情况,用于查看是否出现某个进程CPU占用过高的问题CPU性能分析…

HTTP 压缩

介绍 压缩是提升网站性能的关键手段之一。对于某些类型的文件,最大可减少 70% 的大小,从而大幅降低带宽需求。随着时间的推移,压缩算法不断得到优化,新的高效算法也逐渐被客户端和服务器所支持。 在实际应用中,Web 开…

STM32之循迹避障模块TCRT5000红外反射传感器

目录 一、系统概述 二、TCRT5000红外反射传感器简介 2.1 基本概述 2.2 结构与工作原理 2.2.1 物理结构 2.2.2 工作流程 2.2.3 电路原理图 2.3 电气特性 2.4 模块接口说明 2.5 典型应用电路 2.6 实际应用注意事项 三、硬件设计 3.1 硬件组成 3.2 硬件连…

新能源汽车功率级测试自动化方案:从理论到实践的革命性突破

> 在800V高压平台普及与碳化硅半导体爆发的双轮驱动下,传统测试方法正经历颠覆性变革 “当我看到工程师手动记录测试数据时,就知道这个行业需要一场革命。”——某新能源车企测试总监的深夜感慨 ## 01 新能源汽车测试的痛点与变革 当新能源汽车的**电驱系统功率密度突…

【网络编程】事件驱动 reactor 式的服务器(EPOLL机制)

文章目录业务拆解事件驱动的 reactor总流程图C 代码实现准备工作编写头文件 reactor.h准备头文件准备宏定义声明三大模块函数和基础的内存变量长度定义全局变量定义 EPOLL 实例事件处理的函数与释放资源的函数注册服务器监听套接字的函数accept_cb 模块read_cb 模块send_cb 模块…

如何做好云服务器密码管理

一、设置强密码 强密码就像是给云服务器上了一把“超级锁”。专家建议,一个强密码应该包含大写字母、小写字母、数字和特殊字符,长度至少在 12 位以上。比如说,“Abc12345678”就比简单的“123456”要安全得多。有数据显示,简单密…

《新消费模式与消费者权益保护研讨会》课题研讨会在北京顺利召开

近期,《新消费模式与消费者权益保护研讨会》课题研讨会在北京召开。来自市场监管、政法、宏观管理等部门专家参会,聚焦《消费者权益保护法》《关于以新业态新模式引领新型消费加快发展的意见》等文件精神,探讨激发市场主体活力、促进新型消费…

Gradio全解13——MCP协议详解(6)——MCP服务器构建、测试与示例大全

Gradio全解13——MCP协议详解(6)——MCP服务器构建、测试与示例大全第13章 MCP协议详解13.6 MCP服务器构建、测试与示例大全13.6.1 开发MCP天气服务器1. 天气服务器概述2. 安装Node.js并设置环境3. 构建服务器13.6.2 安装Claude for Desktop1. 安装Claud…

Windows 11 24H2 专业版/家庭版安装教程(2025年6月更新版)- U盘启动盘制作+详细步骤

准备U盘启动盘​ 下载个叫「Rufus」的免费小工具(百度搜就行)。插入一个至少8GB的空U盘(U盘会被清空,提前备份资料!)。打开Rufus,选你的U盘,ISO文件选你下载的那个 zh-cn_windows_1…

mac电脑wireshark快速实现http接口抓包

wireshark介绍 Wireshark 是一款功能强大的网络协议分析工具,可以用来抓取网络中的数据包,包括 HTTP 请求和响应。 wireshark安装 安装下载官网 https://www.wireshark.org/download.html,根据个人电脑环境下载安装wireshark使用 1配置网卡2选…

Softhub软件下载站实战开发(十二):软件管理编辑页面实现

文章目录 Softhub软件下载站实战开发(十二):软件管理编辑页面实现✨功能概述 📋编辑页面实现 🛠️1. 页面结构设计2. aieEditor集成 🌟初始化配置编辑器功能 3. 大整数处理 🔢4. 封面图片上传 &…

微服务外联Feign调用:第三方API调用的负载均衡与容灾实战

01Feign 简介 Feign 是 Spring Cloud Netflix 中的 声明式 HTTP 客户端,它如同一位贴心的信使,帮我们化繁为简,让服务间的调用变得轻松又高效。 Feign 的核心优势在于:。 • 声明式调用:开发者只需定义接口和注解&a…

k8s pod调度基础

目录 一:replication controller和replicaset 1:replication controller replication controller的使用示例。 2:标签与标签选择器 (1)标签 (2)标签选择器 (3)标签…

学习者的Python项目灵感

一、实用工具类 - 文件批量重命名工具 用 os 模块实现按规则(如添加日期、序号、替换关键词)批量重命名文件,适合处理大量图片/文档。 - 简易待办事项管理器(To-Do List) 用 tkinter 或 PyQt 做GUI界面,…

gRPC服务发现

基于 etcd 实现的服务发现,按照非规范化的 etcd key 实现,详细见代码注释。 package discoveryimport ("context""encoding/json""fmt""go.etcd.io/etcd/api/v3/mvccpb"clientv3 "go.etcd.io/etcd/client/…

基于Linux的Spark本地模式环境搭建实验指南

一、实验目的 掌握Spark本地模式的安装与配置方法验证Spark本地环境是否搭建成功了解Spark基本操作和运行原理 二、实验环境准备 操作系统:Linux(推荐ubuntu)Java环境:JDK 1.8或以上版本内存:至少4GB(推…

数学建模_时间序列

什么是时间序列时间序列预测方法/模型条件:非白噪音平稳平稳性评估不平稳变成平稳然后用ARIMA模型确定p,qAR模型(ARMA特例)MA模型(ARMA特例)ARMA模型(普适)灰色模型神经网络/LSTM组合预测模型向量数据预测结果和为1的情况什么是时间序列 省略具体图形例子 时间序列…

linux用rpm包升级sudo包为sudo-1.9.17-2版本

rpm下载地址: https://www.sudo.ws/dist/packages/1.9.17p1/ 备注:其他压缩包下载地址:https://www.sudo.ws/download.html sudo-1.9.17-2.el7.x86_64.rpm 检查一下,本地sudo版本,执行:sudo -V 或者sudo -…