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

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


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.kler.cn/a/593748.html

相关文章:

  • 在使用mybatis时遇到枚举的相关问题和解决
  • The method precision() is undefined for the type BigInteger
  • 二分查找------查找区间
  • AI全天候智能助手,为您构建私人数据库
  • 达芬奇预设:创意现代抽象动态海报活力动态文字标题排版设计视觉预设 MotionVFX – mTitle Hype DVR
  • VLLM专题(三十九)—自动前缀缓存(二)
  • linux性能监控的分布式集群 prometheus + grafana 监控体系搭建
  • 让vscode远程开发也可以图形显示
  • nuxt项目 详情页有阅读次数需要更新,有热门推荐列表需要更新适合做SSG吗
  • 【C++指南】string(三):basic_string底层原理与模拟实现详解
  • 【MyDB】6-TabelManager 字段与表管理 之1-TBM实现思路概览
  • 江小南的题目讲解
  • Vala编程语言教程-语言元素
  • 轮足式机器人运动控制系统设计(大纲)
  • 过程监控——lsof
  • DeepSeek(8):结合Kimi-PPT助手一键生成演示报告
  • 【智能体】| 知识库、RAG概念区分以及智能体是什么
  • Steam游戏实时数据获取API集成文档
  • 从两指到三指:Robotiq机器人自适应夹持器技术解析
  • 将COCO格式的物体检测数据集划分训练集、验证集和测试集