《Python实战进阶》No15: 数据可视化:Matplotlib 与 Seaborn 的高级用法

No15: 数据可视化:Matplotlib 与 Seaborn 的高级用法

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以很快的熟悉它。Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI 工具包(比如 PyQt,WxPython、Tkinter)在应用程序中嵌入图形。与此同时,它也支持以脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用

Seaborn 是基于 Python 且非常受欢迎的图形可视化库,在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形。Seaborn 可以实现 Python 环境下的绝大部分探索性分析的任务,图形化的表达帮助你对数据进行分析,而且对 Python 的其他库(比如 Numpy/Pandas/Scipy)有很好的支持。

本文将介绍Matplotlib和Seaborn的部分高级用法。


在这里插入图片描述

核心概念

1. Artist层对象控制(PathEffect应用)

通过控制Artist对象实现高级视觉效果,如路径特效:

import matplotlib.pyplot as plt
from matplotlib.patheffects import Stroke, Normaltext = plt.text(0.5, 0.5, 'PathEffect', path_effects=[Stroke(linewidth=3, foreground='red'), Normal()],fontsize=30, ha='center')
plt.show()

在这里插入图片描述

2. 多子图布局(GridSpec/SubplotSpec)

创建复杂布局:

fig = plt.figure(figsize=(10, 6))
gs = fig.add_gridspec(3, 3)
ax1 = fig.add_subplot(gs[0, :])
ax2 = fig.add_subplot(gs[1:, 0])
ax3 = fig.add_subplot(gs[1:, 1:])

在这里插入图片描述

3. Seaborn的FacetGrid参数化映射

多维度数据可视化:

import seaborn as sns
import matplotlib.pyplot as plt# 加载Seaborn内置的tips数据集
tips = sns.load_dataset('tips')# 创建FacetGrid对象,并按行(smoker)和列(time)划分子图
g = sns.FacetGrid(tips, row='smoker', col='time', margin_titles=True)# 在每个子图中绘制散点图,横轴为'total_bill',纵轴为'tip'
g.map(sns.scatterplot, 'total_bill', 'tip')# 显示图表
plt.show()

在这里插入图片描述

4. 矢量图形与栅格化混合渲染

优化复杂图表性能:

plt.rcParams['svg.fonttype'] = 'none'  # 保留矢量文本
ax.plot(x, y, rasterized=True)         # 栅格化大数据点

实战案例

地理空间数据可视化(结合Cartopy)

import cartopy.crs as ccrsfig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.coastlines()
ax.set_extent([-20, 60, -40, 40])
plt.show()

在这里插入图片描述

动态数据流实时更新

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation# 初始化数据
x = []  # 存储 x 坐标
y = []  # 存储 y 坐标# 创建绘图环境
fig, ax = plt.subplots()
ax.set_xlim(0, 2 * np.pi)  # 设置 x 轴范围
ax.set_ylim(-1.5, 1.5)     # 设置 y 轴范围
line, = ax.plot([], [], lw=2)  # 创建空的 Line2D 对象# 更新函数
def update(frame):x.append(frame)                  # 添加新的 x 值y.append(np.sin(frame))          # 添加对应的 y 值 (sin 函数)line.set_data(x, y)              # 更新线条数据if frame > 2 * np.pi:            # 限制 x 轴范围ax.set_xlim(frame - 2 * np.pi, frame)ax.figure.canvas.draw()      # 更新绘图区域return line,# 创建动画
ani = animation.FuncAnimation(fig, update, frames=np.linspace(0, 10 * np.pi, 500), interval=50
)# 显示动画
plt.show()# 如果需要保存动画为文件,可以使用以下代码:
# ani.save('sine_wave_animation.mp4', writer='ffmpeg', fps=30)

在这里插入图片描述


扩展思考

可视化陷阱案例

  • 截断坐标轴:柱状图从非零基线开始
  • 误导性双轴:不同量级数据使用不同刻度
  • 三维饼图:透视变形导致比例误判

学术级图表渲染

import matplotlib.pyplot as plt# 使用系统默认的 serif 字体
plt.rcParams.update({"font.family": "serif","font.serif": ["Times New Roman", "DejaVu Serif", "Liberation Serif"],  # 替代 Palatino
})# 使用 MathJax 渲染
plt.rcParams['text.usetex'] = False
plt.rcParams['mathtext.fontset'] = 'cm'  # 使用 Computer Modern 字体# 绘制公式
plt.title(r'$\mathcal{F}(x) = \int_{-\infty}^\infty f(x) e^{-2\pi i x} dx$')
plt.show()

##运行代码前记得安装依赖包,本文在python3.11.5环境通过运行

# 安装依赖
!pip install matplotlib seaborn cartopy

通过掌握这些高级技巧,您将能创建出兼具专业性和艺术性的数据可视化作品。下期我们将探讨三维数据可视化与交互式图表开发!

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

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

相关文章

C++学习之格斗小游戏综合案例

C格斗游戏效果视频 1.案例简介 #include "broadSword.h" //构造函数 BroadSword::BroadSword() { FileManager fm; map<string, map<string, string>> mWeapon; fm.loadCSVData("Weapons.csv", mWeapon); //武器id string id …

LeetCodeHot100

1.两数之和 解题思路&#xff1a; 1.暴力解法 两个for循环解决问题 时间复杂度为 O(n2) class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {if (nums[i] nums[j] target) {…

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…

Spring Boot自动装配原理

实例&#xff1a; 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 配置服务器 redis自动装配 原理&#xff1a; 一切都源于一个关键的注解…

在Windows系统上安装和配置Redis服务

&#x1f31f; 在Windows系统上安装和配置Redis服务 Redis是一个高性能的键值存储数据库&#xff0c;广泛用于缓存、消息队列和实时分析等场景。虽然Redis最初是为Linux设计的&#xff0c;但也有Windows版本可供使用。今天&#xff0c;我将详细介绍如何在Windows系统上安装Red…

《安富莱嵌入式周报》第351期:DIY半导体制造,工业设备抗干扰提升方法,NASA软件开发规范,小型LCD在线UI编辑器,开源USB PD电源,开源锂电池管理

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV16C95YEEZs 《安富莱嵌入式周报》第351期&#xff1a;DIY半导体…

Vue3实战学习(IDEA中打开、启动与搭建Vue3工程极简脚手架教程(2025超详细教程)、Windows系统命令行启动Vue3工程)(2)

目录 一、命令行中重新启动已搭建好的Vue3工程。(快速上手) &#xff08;0&#xff09;Windows环境下使用命令行从零到一手动搭建Vue3工程教程。 &#xff08;1&#xff09;首先找到已建Vue3工程的目录。 &#xff08;2&#xff09;无需再下载依赖包&#xff0c;直接执行npm ru…

Visual Studio 2022新建c语言项目的详细步骤

步骤1&#xff1a;点击创建新项目 步骤2&#xff1a;到了项目模板 --> 选择“控制台应用” (在window终端运行代码。默认打印"Hello World") --> 点击 “下一步” 步骤3&#xff1a;到了配置新项目模块 --> 输入“项目名称” --> 更改“位置”路径&…

23年以后版本pycharm找不到conda可执行文件解决办法

这个问题很痛苦&#xff0c;折磨了我半天。 就是链接远程服务器的时候 就一直以为这三个都要配置 就这个conda环境这里怎么都找不到服务器的虚拟环境的python可执行文件&#xff0c;非常痛苦。 后面查找了资料&#xff0c;找了好久&#xff0c;才发现&#xff0c;原来只需要配…

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…

计算机网络软考

1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据&#xff0c;自下而上的解封装数据&#xff0c;实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中&#xff0c;用高电平代表 “1”、低电平代表 “0”&#xff0c…

静态时序分析:SDC约束命令set_ideal_latency详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 当使用set_ideal_network命令将当前设计中的一组端口或引脚标记为理想网络源后&#xff0c;理想属性会沿着组合逻辑进行传播&#xff0c;理想网络中的线网和单元…

C语言(队列)

1、队列的原理和作用 1、1 队列的原理 队列的原理其实就像一个管道&#xff0c;如果我们不断的往管道里塞乒乓球&#xff0c;每个乒乓球在管道里就会排列一条队列&#xff0c;先进去的乒乓球会先出来&#xff0c;这个就是队列先进先出的规则 球从左边进去的动作叫入列&#xf…

十七、从0开始卷出一个新项目之瑞萨RZN2L定时器(GPT)+DMA生成PWM的运动控制

一、概述 嵌入式科普(34)通过对比看透DMA的本质 分享瑞萨RZN2L使用DMA生成PWM的运动控制的例程源码 rzn2l必要的外设资源&#xff1a; rzn2l拥有32-bit timer General PWM Timer (GPT) with 18 channels CPU、GPT最高频率400Mhz DMAC0 and DMAC1 8 channels 8 channels 还…

无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法

视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可将上传的点播…

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

第一次开机详细步骤 步骤一&#xff1a;树莓派系统烧录1 搜索打开烧录软件“Raspberry Pi Imager”2 选择合适的设备、系统、SD卡3 烧录配置选项 步骤二&#xff1a;SSH远程树莓派1 树莓派插电2 网络连接&#xff08;有线或无线&#xff09;3 确定树莓派IP地址 步骤三&#xff…

关于 QPalette设置按钮背景未显示出来 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146047054 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

文献分享: ConstBERT固定数目向量编码文档

&#x1f602;图放这了&#xff0c;大道至简的 idea \text{idea} idea不愧是 ECIR \text{ECIR} ECIR &#x1f449;原论文 1. ConstBERT \textbf{1. ConstBERT} 1. ConstBERT的原理 1️⃣模型的改进点&#xff1a;相较于 ColBERT \text{ColBERT} ColBERT为每个 Token \text{Tok…

DeepSeek 医疗大模型微调实战讨论版(第一部分)

DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …

使用marked.min.js编写Markdown文档页面,可做知识库、技术文档、使用文档、教程文档等!

摘要 marked.min.js 是一个高效的 JavaScript Markdown 解析器&#xff0c;它能够将 Markdown 格式的文本转换为 HTML。作为一个轻量级的库&#xff0c;marked 在处理大规模的 Markdown 内容时表现出色&#xff0c;并且具备广泛的兼容性和可定制性。 本文将深入探讨如何使用 …