Python数据可视化实战:从基础图表到高级分析

news2025/3/22 18:35:37

Python数据可视化实战:从基础图表到高级分析

数据可视化是数据分析的重要环节,通过直观的图表可以快速洞察数据规律。本文将通过5个实际案例,手把手教你使用Python的Matplotlib库完成各类数据可视化任务,涵盖条形图、堆积面积图、饼图、直方图等常见图表类型,并包含误差分析、颜色映射等高级技巧。


案例1:商品网购替代率分析

数据背景

分析不同商品种类的网购替代率(线上消费对线下的替代比例),数据来源:国家统计局北京调查总队抽样调查。

实现代码

# 01_online_substitution_rate.py
import matplotlib.pyplot as plt
import numpy as np

# 中文显示设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 数据准备
categories = ["家政服务", "交通票务", "家具", "手机配件", 
             "计算机产品", "汽车用品", "充值服务", "个护用品",
             "书报音像", "餐饮旅游", "家用电器", "食品饮料",
             "日用品", "保险票务", "服装家纺", "数码产品",
             "其他商品", "工艺品"]
substitution_rates = [0.959, 0.951, 0.935, 0.924, 0.893,
                     0.892, 0.865, 0.863, 0.860, 0.856,
                     0.854, 0.835, 0.826, 0.816, 0.798,
                     0.765, 0.763, 0.671]

# 可视化
plt.figure(figsize=(10, 8))
bars = plt.barh(categories, substitution_rates, 
               color=plt.cm.viridis(np.linspace(0,1,len(categories))),
               height=0.7)

# 添加数据标签
for bar in bars:
    width = bar.get_width()
    plt.text(width+0.01, bar.get_y()+0.3,
            f'{width*100:.1f}%',
            va='center')

plt.title("各商品品类网购替代率分析", pad=20)
plt.xlabel("替代率")
plt.xlim(0.6, 1.0)
plt.grid(axis='x', alpha=0.3)
plt.tight_layout()![请添加图片描述](https://i-blog.csdnimg.cn/direct/b58d60ae0fcb4e5da2802684ccfdfca5.png)

plt.show()

可视化解读

在这里插入图片描述

  • 使用水平条形图清晰展示长文本标签
  • 渐变色映射替代率高低(深色表示高替代率)
  • 右侧数据标签辅助精确读数

案例2:物流公司费用对比

数据背景

比较A/B/C三家物流公司全年费用分布,数据来源:企业年度财报。

实现代码

# 02_logistics_cost.py
months = np.arange(1,13)
cost_a = [198,215,245,222,200,236,201,253,236,200,266,290]
cost_b = [203,236,200,236,269,216,298,333,301,349,360,368]
cost_c = [185,205,226,199,238,200,250,209,246,219,253,288]

plt.figure(figsize=(12,6))
plt.stackplot(months, cost_a, cost_b, cost_c,
             colors=['#1f77b4','#ff7f0e','#2ca02c'],
             alpha=0.8,
             labels=['A公司','B公司','C公司'])

# 添加趋势线
total = np.array(cost_a) + np.array(cost_b) + np.array(cost_c)
plt.plot(months, total, color='#d62728', marker='o', 
        linestyle=':', label='总费用')

plt.title("物流公司月度费用对比", pad=20)
plt.xlabel("月份")
plt.ylabel("费用(万元)")
plt.xticks(months)
plt.legend(loc='upper left')
plt.grid(axis='y', linestyle='--')
plt.show()

可视化解读

在这里插入图片描述

  • 堆积面积图展示费用构成
  • 红色趋势线反映总费用变化
  • 半透明效果增强层次感

案例3:支付宝消费分析

数据背景

解析用户月度消费结构,数据来源:支付宝账单导出。

实现代码

# 03_alipay_bills.py
labels = ['购物','人情','餐饮','通信','日用','交通','娱乐','其他']
sizes = [800,100,1000,200,300,200,200,200]
colors = ['#4B9CD3','#FF6F61','#2E5339','#9467bd',
         '#8c564b','#e377c2','#7f7f7f','#bcbd22']

plt.figure(figsize=(10,8))
wedges, texts, autotexts = plt.pie(sizes, 
                                  labels=labels,
                                  colors=colors,
                                  autopct='%1.1f%%',
                                  startangle=90,
                                  wedgeprops={'width':0.4})  # 环形图

# 添加中心注释
plt.text(0, 0, "总支出\n3000元", 
        ha='center', va='center',
        fontsize=14)

plt.title("支付宝月度消费结构", pad=20)
plt.axis('equal')  # 正圆形
plt.show()

可视化解读

在这里插入图片描述

  • 环形饼图增强现代感
  • 中心区域突出总金额
  • 协调配色提升可读性

案例4:正态分布可视化

数据背景

展示随机数的分布规律,验证中心极限定理。

实现代码

# 04_normal_distribution.py
data = np.random.normal(loc=0, scale=1, size=1000)

plt.figure(figsize=(10,6))
plt.hist(data, bins=20, density=True, 
        alpha=0.6, color='#1f77b4')

# 添加理论曲线
x = np.linspace(-4,4,100)
plt.plot(x, 1/(1*np.sqrt(2*np.pi)) * np.exp(-0.5*(x/1)**2),
         linewidth=2, color='#d62728')

plt.title("正态分布验证", pad=20)
plt.xlabel("数值")
plt.ylabel("概率密度")
plt.grid(alpha=0.3)
plt.show()

可视化解读

在这里插入图片描述

  • 直方图展示实际分布
  • 红色曲线表示理论分布
  • 半透明处理避免视觉压迫

案例5:班级身高分析

数据背景

模拟生成班级身高数据,分析分布特征。

实现代码

# 05_class_height.py
heights = np.random.normal(loc=170, scale=5, size=40)

plt.figure(figsize=(10,6))
n, bins, patches = plt.hist(heights, bins=6, 
                           color='#4B9CD3',
                           edgecolor='white')

# 添加统计信息
plt.axvline(heights.mean(), color='red', linestyle='--')
plt.text(0.7, 0.8, 
        f'μ={heights.mean():.1f}cm\nσ={heights.std():.1f}cm',
        transform=plt.gca().transAxes)

plt.title("班级身高分布", pad=20)
plt.xlabel("身高(cm)")
plt.ylabel("人数")
plt.show()

可视化解读

在这里插入图片描述

  • 蓝色柱形展示各区间人数
  • 红色虚线标注平均身高
  • 右上角显示统计参数

总结

本文通过5个典型案例演示了:

  • 条形图:对比类数据展示
  • 堆积图:构成分析
  • 饼图:比例呈现
  • 直方图:分布规律
  • 综合应用:数据模拟+统计分析

完整代码已托管至GitHub仓库,建议读者克隆代码库后结合实际数据修改参数练习。掌握这些可视化方法后,你可以:

  1. 制作专业的分析报告
  2. 优化数据呈现方式
  3. 快速发现数据异常
  4. 提升数据分析效率

扩展建议

  • 尝试使用Seaborn库简化复杂图表
  • 学习Plotly制作交互式可视化
  • 探索D3.js实现高级动态效果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18

作者:来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量,以适应大规模生产工作负载,例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中,我们探讨了如何使用 Elasticsearch 创建视觉搜…

蓝桥每日打卡--区间移位

#蓝桥#JAVA#区间移位 题目描述 数轴上有n个闭区间:D1,⋯Dn。 其中区间Di用一对整数[ai,bi]来描述,满足 ai≤bi。 已知这些区间的长度之和至少有。 所以,通过适当的移动这些区间,你总可以使得他们的"并"覆盖 [0,],也…

CUDAOpenCV 基于Hessian矩阵计算特征值

文章目录 一、简介二、实现代码三、实现效果一、简介 基于之前的博客:CUDA&OpenCV Hessain矩阵计算,我们可以计算出每个像素的特征值: 二、实现代码 ComputeHessainMatrix.cuh #ifndef HESSAIN_GPU_CUH #

基于CAMEL 的Workforce 实现多智能体协同工作系统

文章目录 一、workforce 简介1.架构设计2.通信机制 二、workforce 工作流程图示例1.用户角色2.工作流程 三、workforce 中重要函数说明1.__init__函数2.add_single_agent_worker 函数3.add_role_playing_worker 函数4.add_workforce 函数 四、基于workforce实现多智能体协调&am…

PostgreSQL_数据表结构设计并创建

目录 前置: 1 数据表设计思路 2 数据表格SQL 3 创建 3.1 创建数据库 db_stock 3.2 在 pgAdmin4 中创建表 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文 1 数据表设计思路 1 日数据来自优矿,优矿的数据…

如何在MCU工程中启用HardFault硬错误中断

文章目录 一、HardFault出现场景二、启动HardFault三、C代码示例 一、HardFault出现场景 HardFault(硬故障) 错误中断是 ARM Cortex-M 系列微控制器中一个较为严重的错误中断,一旦触发,表明系统遇到了无法由其他异常处理机制解决…

MySQL -- 复合查询

数据库的查询是数据库使用中比较重要的环节,前面的基础查询比较简单,不做介绍,可自行查阅。本文主要介绍复合查询,并结合用例进行讲解。 本文的用例依据Soctt模式的经典测试表,可以自行下载,也可以自己创建…

卷积神经网络 - 卷积层(具体例子)

为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…

测试Claude3.7 sonnet画蛋白质

测试Claude3.7 sonnet画蛋白虽然画的很粗糙,但是大致画了出来

java项目之基于ssm的游戏攻略网站(源码+文档)

项目简介 游戏攻略网站实现了以下功能: 管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。 💕…

本地基于Ollama部署的DeepSeek详细接口文档说明

前文,我们已经在本地基于Ollama部署好了DeepSeek大模型,并且已经告知过如何查看本地的API。为了避免网络安全问题,我们希望已经在本地调优的模型,能够嵌入到在本地的其他应用程序中,发挥本地DeepSeek的作用。因此需要知…

python NameError报错之导库报错

在日常代码编写中,经常出现如 图1 一样的报错,在代码多时很难找到问题,但翻看代码后就会发现是因为未导库, 图1 报错 代码: time.sleep(0.1) print("time库") 解决方法: 第一步:在代码中添加导库代码 import time #…

Web3网络生态中数据保护合规性分析

Web3网络生态中数据保护合规性分析 在这个信息爆炸的时代,Web3网络生态以其独特的去中心化特性,逐渐成为数据交互和价值转移的新平台。Web3,也被称为去中心化互联网,其核心理念是将数据的控制权归还给用户,实现数据的…

C++ 语法之数组指针

一维数组: 如果我们定义了一个一维数组,那么这个数组名,就是指向第一个数组元素的地址,也即,是整个数组分配的内存空间的首地址。 比如 int a[3]; 定义了一个包含三个元素的数组。因为一个int占4个字节,那…

PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换

一、概述 在三维GIS和数字孪生领域,3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出,专为大规模3D数据可视化设计,能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式,主要用于存储点云数据或…

Java定时任务的三重境界:从单机心跳到分布式协调

《Java定时任务的三重境界:从单机心跳到分布式协调》 本文将以生产级代码标准,揭秘Java定时任务从基础API到分布式调度的6种实现范式,深入剖析ScheduledThreadPoolExecutor与Quartz Scheduler的线程模型差异,并给出各方案的性能压…

【Linux网络】手动部署并测试内网穿透

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

java项目之在线购物系统(源码+文档)

项目简介 在线购物系统实现了以下功能: 使用在线购物系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的…

OO_Unit1

第一次作业 UML类图 代码复杂度分析 其中Expr中的toString方法认知复杂度比较高,主要源于多层条件嵌套和分散的字符串处理逻辑,重构时可重点关注这两部分的解耦。 代码量分析 1.”通用形式“ 我觉得我的设计的最大特点就是“通用形式”,具…

重要重要!!fisher矩阵元素有什么含义和原理; Fisher 信息矩阵的形式; 得到fisher矩阵之后怎么使用

fisher矩阵元素有什么含义和原理 目录 fisher矩阵元素有什么含义和原理一、对角线元素( F i , i F_{i,i} Fi,i​)的含义与原理二、非对角线元素( F i , j F_{i,j} Fi,j​)的含义与原理Fisher 信息矩阵的形式矩阵的宽度有位置权重数量决定1. **模型参数结构决定矩阵维度**2.…