学习笔记:使用 pandas 和 Seaborn 绘制柱状图

学习笔记:使用 pandas 和 Seaborn 绘制柱状图

前言

今天在使用 pandas 对数据进行处理并在 Python 中绘制可视化图表时,遇到了一些关于字体设置和 Seaborn 主题覆盖的小问题。这里将学习到的方法和注意事项做个总结,以便之后的项目中可以快速上手和排错。


一、设置 Matplotlib 字体

在 Python 中,Matplotlib 绘图时默认使用的英文字体不支持中文,如果直接渲染中文,往往会显示成方块或乱码。为了解决这个问题,我们可以通过修改 rcParams 来设置一个支持中文的字体,例如 SimHei(黑体)或 Microsoft YaHei

下面是一段简单的函数,用于快速切换中文字体:

def set_chinese_font(font_name='SimHei'):"""设置Matplotlib的中文字体。:param font_name: 字体名称,默认使用'SimHei'。其他常见中文字体如'Microsoft YaHei'。"""import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = [font_name]  # 设置中文字体plt.rcParams['axes.unicode_minus'] = False      # 正常显示负号

注意:如果系统中没有安装对应字体,设置可能不会生效。可以自行在系统(如 Windows 的 C:\Windows\Fonts)安装相应的字体文件。


二、Seaborn 与 Matplotlib 主题的冲突

很多时候,我们还会喜欢使用 Seaborn 自带的主题来让图表看起来更美观,例如:

import seaborn as sns
sns.set(style="whitegrid")

然而,一些版本的 Seaborn 可能会覆盖你在 Matplotlib 中设置的字体;或者你在不同地方多次调用不同的主题,也可能引发冲突。常见解决方法是要么只使用 Seaborn 的主题而不手动改字体,要么先调用 Seaborn 的主题再调用中文字体,让中文字体占最终优先级。

例如,如果你想保留白色网格风格,但又希望用黑体显示中文,可以这样写:

import seaborn as sns
sns.set(style="whitegrid")# 然后设置中文字体
set_chinese_font('SimHei')

如果两者仍然冲突,建议去掉其中一个或尝试删除 Matplotlib 缓存,让它重新扫描系统字体。


三、Seaborn barplot 的工作原理

在使用 Seaborn 绘制柱状图时,常见用法是:

import seaborn as snsbar_plot = sns.barplot(x='学院',y='人数',data=college_counts,palette='viridis'
)

不需要再手动把 bar_plot “放进” Matplotlib,因为 Seaborn 会自动在当前的 Matplotlib Figure 中生成 Axes,返回给我们的是一个已经绑定到该 Figure 的对象。因此,只要最后 plt.show()plt.savefig(),就能看到或保存这张图表。

1. 同一个坐标多个柱状(同一个 x 有多个柱子)

当我们想要在同一个 x 值下显示多个柱子(例如,同一个学院下,分别统计“参保”和“未参保”人数),可以使用 hue 参数:

bar_plot = sns.barplot(x='学院',y='人数',data=grouped_df,hue='2025年参保情况',   # 在同一个学院里区分参保和未参保palette='viridis',dodge=True,            # True:并排放置;False:重叠放置legend=True            # 是否显示图例
)
关键参数说明
  • x='学院': 横轴分组依据。每个学院在 x 轴上有一个刻度。

  • hue='2025年参保情况': 同一个学院如何再细分颜色。因为 grouped_df 里有一列 “2025年参保情况” (参保 / 未参保),Seaborn 就会在同一个 x 刻度下绘制两根柱子并用不同的颜色。

  • dodge=True: 当同一个 x 有多个柱子时,并排显示。如果改成 False,则会把这些柱子重叠绘制。
    dodge意味躲避,= true时
    在这里插入图片描述
    = false时
    在这里插入图片描述

  • legend=True: 是否显示图例。因为我们有 hue,所以图例可以帮我们标识不同颜色所对应的“参保” / “未参保”。

2. 如何得到 grouped_df

通常,我们会有一个 DataFrame 包含诸如“学院”、“2025年参保情况”、“姓名”等列。要得到分组后的每组人数,可以这样:

grouped_df = df.groupby(['学院', '2025年参保情况']).size().reset_index(name='人数')
  • groupby(['学院', '2025年参保情况']):先按“学院”和“参保情况”分组
  • .size():求出每个分组内行数,即人数
  • .reset_index(name='人数'):把分组索引转换为普通列,并将这个计数列重命名为“人数”

然后 grouped_df 就可以拿来给 Seaborn 的 barplot 使用了。


四、总结

  1. 字体设置与 Seaborn 主题冲突

    • 要么只用一方;
    • 要么先 sns.set(...),再 set_chinese_font(...)
  2. Seaborn barplot 与 Matplotlib

    • Seaborn 自动把数据绘制到当前图中,不需要显式地“放进” Matplotlib;
    • 只需 plt.show()plt.savefig() 查看或保存结果。
  3. 一个横坐标多个柱状图

    • 通过设置 hue='...' 参数,告诉 Seaborn 在同一 x 类别下再细分颜色。
    • dodge=True 为并排,不会重叠;dodge=False 则重叠显示。
  4. 分组汇总

    • 借助 groupby() + size()(或 count()sum()等)做聚合,再用 reset_index 转换成列形式,是一条非常重要的分析路径。

通过这些技巧,我们就可以轻松地使用 pandas + Seaborn 绘制各种各样的统计图表,展示数据中的分类情况、分布情况以及关系,满足日常数据分析与可视化需求。


延伸阅读

  • Seaborn 官方文档: https://seaborn.pydata.org/
  • Matplotlib 字体管理: https://matplotlib.org/stable/tutorials/text/text_props.html
  • pandas 文档: https://pandas.pydata.org/docs/

至此,今天的学习心得就整理完毕啦! 希望这篇笔记能帮你更快掌握在 Python 中处理中文显示、使用 Seaborn 绘制柱状图,以及在同一个坐标轴上并排展示多个柱子的技巧。祝你在数据可视化之路上更进一步!

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

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

相关文章

【Linux】进程间通信-> 共享内存

共享内存原理 在C语言/C中,malloc也可以在物理内存申请空间,将申请的物理内存空间通过页表映射到进程地址空间,将内存空间的起始地址(虚拟地址)返回,进而进程可以使用虚拟地址通过页表映射到物理内存的方式…

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白,通过语言大模型百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以…

【Maven】Maven打包机制详解

Maven打包的类型? 以下是几种常见的打包形式: 1、jar (Java Archive) 用途:用于包含 Java 类文件和其他资源(如属性文件、配置文件等)的库项目。特点: 可以被其他项目作为依赖引用。适合创建独立的应用程…

MySQLOCP考试过了,题库很稳,经验分享。

前几天,本人参加了Oracle认证 MySQLOCP工程师认证考试 ,先说下考这个证书的初衷: 1、首先本人是从事数据库运维的,今年开始单位逐步要求DBA持证上岗。 2、本人的工作是涉及数据库维护,对这块的内容比较熟悉&#xff…

MySQL数据导出导出的三种办法(1316)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法: 使用mysqldump工具: 优点: 简单易用,只需一条命令即可完成数据导出。可以导出表结构和数据,方便完整备份。支持过滤条件,可以选择导出部分数据…

Go 协程池 Gopool VS ants 原理解析

写过高并发的都知道,控制协程数量是问题的关键,如何高效利用协程,本文将介绍gopool和ants两个广泛应用的协程池,通过本文你可以了解到: 1. 实现原理 2. 使用方法 3. 区别 背景 虽然通过go func()即可轻量级实现并发&…

无人机无法返航紧急处理方式!

一、检查飞行环境 了解禁飞原因和规定:首先,需要了解所在地区的无人机飞行规定,确认是否存在禁飞区或限飞区。如果处于禁飞区,应遵守相关规定,不要强行飞行。 检查天气情况:恶劣的天气条件(如…

NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners

论文速读|BERTs are Generative In-Context Learners 论文信息: 简介: 本文探讨了在自然语言处理(NLP)领域中,上下文学习(in-context learning)的能力,这通常与因果语言模型&#x…

vue3<script setup>中使用Swiper

swiper网址 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 Swiper - The Most Modern Mobile Touch Slider 安装 Swiper npm安装: npm install swiper yarn安装: yarn add swiper 导入带有所有模块(捆绑包)的 Swiper //…

今日收获(C语言)

一.文件的打开 有这样一个结构体,它内部是文件信息区,文件信息区中的变化可以影响到硬盘中的数据。这个结构体的名字是FILE。我们如果想要写代码对文件进行各种操作,就需要一个指向文件信息区的指针,这个指针的类型是FILE*&#…

node.js卸载并重新安装(超详细图文步骤)

卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样,总之是找到自己的nodejs安装路径,下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…

仓颉编程语言:编程世界的 “文化瑰宝”

我的个人主页 在当今编程领域百花齐放的时代,各种编程语言争奇斗艳,服务于不同的应用场景和开发者群体。然而,有这样一种编程语言,它承载着独特的文化内涵,宛如编程世界里一颗熠熠生辉的“文化瑰宝”,那就…

Android使用JAVA调用JNI原生C++方法

1.native-lib.cpp为要生成so库的源码文件 2.JNI函数声明说明 NewStringUTF函数会返回jstring JNI函数声明规则 3.JAVA中声明及调用JNI函数 声明: 调用

DAY178内网渗透之内网对抗:横向移动篇入口差异切换上线IPC管道ATSC任务Impacket套件UI插件

1.内网横向移动 1、横向移动篇-入口点分析-域内域外打点 2、横向移动篇-IPC利用-连接通讯&计划任务, 3、横向移动篇-IPC利用-命令模式&工具套件 1.1 横向移动入口知识点 收集到域内用户和凭据后,为后续利用各种协议密码喷射通讯上线提供条件,…

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…

大模型—Ollama 结构化输出

Ollama 结构化输出 Ollama现在支持结构化输出,使得可以按照由JSON模式定义的特定格式来约束模型的输出。Ollama的Python和JavaScript库已经更新,以支持结构化输出。 结构化输出的用例包括: 从文档中解析数据从图像中提取数据结构化所有语言模型响应比JSON模式更可靠和一致开…

欧拉计划 Project Euler 35 题解

欧拉计划 Problem 35 题解 题干思路code暴力筛法rotate函数使用语法示例代码 题干 思路 一个很自然的思路就是暴力找&#xff0c;遍历一百万之内的所有数&#xff0c;也可以先把一百万以内所有的素数筛出来然后从中取选。这里我使用的是暴力算法。 code 暴力 #include <…

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题&#xff0c;这里专门写一篇文章进行讲解。包括如何自定义注解&#xff0c;以及注意事项&#xff0c;相信JAVA中很多朋友业写过&#xff0c;但是今天写的是Python哦。。。 2.定义 在 Python…

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…