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

Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)

🎯 今日目标

  • 掌握 Matplotlib 的基本绘图方法(折线图、柱状图、饼图)
  • 掌握 Seaborn 的高级绘图方法(分类图、分布图、箱线图)
  • 熟悉图像美化(标题、标签、颜色、风格)
  • 完成一组学生成绩数据的可视化展示

🧱 一、Matplotlib 基础绘图

import matplotlib.pyplot as plt# 示例数据
names = ["张三", "李四", "王五", "赵六"]
scores = [88, 92, 75, 60]# 折线图
plt.plot(names, scores, marker="o")
plt.title("学生成绩折线图")
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.grid(True)
plt.show()

✅ 常见图表类型

# 柱状图
plt.bar(names, scores)# 饼图
plt.pie(scores, labels=names, autopct="%.1f%%")# 保存图像
plt.savefig("charts/score_chart.png")

🌈 二、Seaborn 入门(更美观 + 高级)

import seaborn as sns
import pandas as pd# 示例 DataFrame
df = pd.DataFrame({"姓名": names,"成绩": scores,"性别": ["男", "女", "男", "女"]
})# 设置风格
sns.set_style("whitegrid")# 分类柱状图
sns.barplot(data=df, x="姓名", y="成绩", hue="性别")
plt.title("学生成绩(按性别)")
plt.show()

🎨 三、其他 Seaborn 图示示例

# 成绩分布直方图
sns.histplot(df["成绩"], bins=5)# 箱线图:成绩分布(可识别异常值)
sns.boxplot(data=df, x="性别", y="成绩")# 成绩与是否及格关系散点图(需添加字段)
sns.scatterplot(data=df, x="成绩", y="是否及格")

🧪 今日练习任务

使用 students_cleaned.csv (前两天清洗的表格数据)文件,完成以下图表:

  1. 所有学生成绩的折线图 & 柱状图

  2. 不同性别的平均成绩柱状图

  3. 所有学生成绩分布直方图

  4. 学生成绩箱线图(按性别分组)

  5. 将所有图像保存为 PNG 图片到 charts/ 文件夹

    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import osrc = {'font.sans-serif': 'Arial Unicode MS','axes.unicode_minus': False}
    # 设置中文字体支持(如 matplotlib 出现乱码)
    plt.rcParams['font.family'] = 'Arial Unicode MS'  # Mac 用户可用
    # plt.rcParams['font.sans-serif'] = ['SimHei']   # Windows 用户用这行
    plt.rcParams['axes.unicode_minus'] = False# 路径设置
    input_path = "data/students_cleaned.csv"
    output_dir = "charts"
    os.makedirs(output_dir, exist_ok=True)# 加载数据
    df = pd.read_csv(input_path)
    print("✅ 已加载学生数据:")
    print(df.head())# -------- 图表 1:学生成绩折线图 --------
    plt.figure(figsize=(8, 5))
    plt.plot(df["姓名"], df["成绩"], marker='o')
    plt.title("学生成绩折线图")
    plt.xlabel("姓名")
    plt.ylabel("成绩")
    plt.grid(True)
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩折线图.png")
    plt.close()# -------- 图表 2:学生成绩柱状图 --------
    plt.figure(figsize=(8, 5))
    plt.bar(df["姓名"], df["成绩"], color="skyblue")
    plt.title("学生成绩柱状图")
    plt.xlabel("姓名")
    plt.ylabel("成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩柱状图.png")
    plt.close()# -------- 图表 3:不同性别的平均成绩柱状图 --------
    plt.figure(figsize=(6, 4))
    sns.set(style="whitegrid", rc=rc)
    avg_by_gender = df.groupby("性别")["成绩"].mean().reset_index()
    sns.barplot(data=avg_by_gender, x="性别", y="成绩", hue='性别', palette="Set2", legend=False)
    plt.title("不同性别的平均成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/性别平均成绩柱状图.png")
    plt.close()# -------- 图表 4:成绩分布直方图 --------
    plt.figure(figsize=(6, 4))
    sns.histplot(df["成绩"], bins=5, kde=True, color="orange")
    plt.title("成绩分布直方图")
    plt.xlabel("成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩分布直方图.png")
    plt.close()# -------- 图表 5:成绩箱线图(按性别) --------
    plt.figure(figsize=(6, 4))
    sns.boxplot(data=df, x="性别", y="成绩", hue="性别", palette="Pastel1", legend=False)
    plt.title("成绩箱线图(按性别)")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩箱线图_按性别.png")
    plt.close()print(f"\n✅ 所有图表已生成并保存至:{output_dir}/")
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述


✍️ 今日总结

  • 掌握了 Matplotlib 基本图形绘制技巧
  • 掌握了 Seaborn 的分类、分布图制作方法
  • 能基于清洗后的数据完成完整的图形展示
  • 理解了图表选择和美化对表达分析结论的重要性
http://www.lqws.cn/news/498547.html

相关文章:

  • 《Redis高并发优化策略与规范清单:从开发到运维的全流程指南》
  • 打包winform
  • 使用uv安装python任意版本,命令:uv python install
  • 数组题解——​最大子数组和​【LeetCode】(更新版)
  • (nice!!!)(LeetCode 每日一题) 2081. k 镜像数字的和 (枚举)
  • (cvpr2025) DefMamba: Deformable Visual State Space Model
  • 008 Linux 开发工具(下) —— make、Makefile、git和gdb
  • VitePress搭建静态博客
  • logstash读取kafka日志写到oss归档存储180天
  • 提示词模板设计:LangGPT的提示词设计框架
  • RK3288 android7.1 将普通串口设置为调试串口
  • WinUI3入门8:解决release版异常 取消优化和裁剪
  • QML革命:下一代GUI开发的核心优势详解
  • WebSocket 端点 vs Spring Bean
  • PyTorch 实现的 GlobalPMFSBlock_AP_Separate:嵌套注意力机制在多尺度特征聚合中的应用
  • LLM 编码器 怎么实现语义相关的 Token 向量更贴近? mask训练:上下文存在 ;; 自回归训练:只有上文,生成模型
  • 601N1 icm45696 串口python读取及显示
  • SQL Server2022版详细安装教程(Windows)
  • Flutter开发中记录一个非常好用的图片缓存清理的插件
  • MATLAB GUI界面设计 第四章——图像的绘制与显示
  • 项目上线(若依前后分离版)
  • Kubernetes安全
  • Frida Hook Android App 点击事件实战指南:从进程识别到成功注入
  • H5新增属性
  • C++ Vector 基础入门操作
  • 技能系统详解(2)——特效表现
  • nnv开源神经网络验证软件工具
  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(1)逻辑回归(Logistic Regression)
  • 华大北斗TAU951M-P200单频定位模块 多系统冗余保障永不掉线 物流/车载导航首选
  • 历史项目依赖库Bugfix技巧-类覆盖