学习笔记:使用 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
使用了。
四、总结
-
字体设置与 Seaborn 主题冲突:
- 要么只用一方;
- 要么先
sns.set(...)
,再set_chinese_font(...)
。
-
Seaborn barplot 与 Matplotlib
- Seaborn 自动把数据绘制到当前图中,不需要显式地“放进” Matplotlib;
- 只需
plt.show()
或plt.savefig()
查看或保存结果。
-
一个横坐标多个柱状图
- 通过设置
hue='...'
参数,告诉 Seaborn 在同一 x 类别下再细分颜色。 dodge=True
为并排,不会重叠;dodge=False
则重叠显示。
- 通过设置
-
分组汇总
- 借助
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 绘制柱状图,以及在同一个坐标轴上并排展示多个柱子的技巧。祝你在数据可视化之路上更进一步!
相关文章:

学习笔记:使用 pandas 和 Seaborn 绘制柱状图
学习笔记:使用 pandas 和 Seaborn 绘制柱状图 前言 今天在使用 pandas 对数据进行处理并在 Python 中绘制可视化图表时,遇到了一些关于字体设置和 Seaborn 主题覆盖的小问题。这里将学习到的方法和注意事项做个总结,以便之后的项目中可以快…...
【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
1、popup组件placement设置top没有生效? 可以用offset属性将popup往下边偏移一下 来规避 2、组件携带自定义参数的接口是哪个? 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-…...

后端开发-Maven
环境说明: windows系统:11版本 idea版本:2023.3.2 Maven 介绍 Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 使用一个项目对象模型(POM),通过一组构建规则和约定来管理项目的构建…...
自动化办公-合并多个excel
在日常的办公自动化工作中,尤其是处理大量数据时,合并多个 Excel 表格是一个常见且繁琐的任务。幸运的是,借助 Python 语言中的强大库,我们可以轻松地自动化这个过程。本文将带你了解如何使用 Python 来合并多个 Excel 表格&#…...

mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
前言: 好久没更新博客了,这两个月真的是异常的忙,白天要忙着公司里的事,晚上还要忙着修改小论文,一点自己的时间都没有了,不过确确实实是学到了很多东西,对无人机的技术研究也更深了一些。不过好…...

小程序基础 —— 08 文件和目录结构
文件和目录结构 一个完整的小程序项目由两部分组成:主体文件、页面文件: 主体文件:全局文件,能够作用于整个小程序,影响小程序的每个页面,主体文件必须放到项目的根目录下; 主体文件由三部分组…...

FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
与IIR数字滤波器的设计类似,设计FIR数字滤波器也需要事先给出理想滤波器频率响应 H ideal ( e j ω ) H_{\text{ideal}}(e^{j\omega}) Hideal(ejω),用实际的频率响应 H ( e j ω ) H(e^{j\omega}) H(ejω)去逼近 H ideal ( e j ω ) H_{\text{ideal}}…...

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

WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)
在一个WPF项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: ----------…...

Kafka 幂等性与事务
文章目录 幂等性实现机制配置使用局限性 事务使用场景配置使用实现机制事务过程事务初始化事务开始事务提交事务取消事务消费 幂等性 Producer 无论向 Broker 发送多少次重复的数据,Broker 端只会持久化一条,保证数据不丢失且不重复。 实现机制 通过引…...

day2 Linux操作系统指令
思维导图 在家目录下创建目录文件,dir 1、dir下创建dir1和dir2 2、把当前目录下的所有文件拷贝到dir1中, 3、把当前目录下的所有脚本文件拷贝到dir2中 4、把dir2打包并压缩为dir2.tar.xz 5、再把dir2.tar.xz移动到dir1中 6、解压dir1中的压缩包 7、使用…...

AI一周重要会议和活动概览
一、小模型的曙光和机会之思辨高峰论坛 会议介绍:小模型的曙光和机会之思辨”高峰论坛暨第32期CSIG图像图形学科前沿讲习班于2025年1月3—4日在杭州举办,会议由中国图象图形学学会主办,中国图象图形学学会前沿科技论坛委员会承办。本次论坛设…...
重启ubuntu服务器,如何让springboot服务自动运行
文章目录 1. 使用 systemd 服务步骤: 2. 使用 cron 的 reboot 任务步骤: 3. 使用 init.d 脚本(适用于较旧版本)步骤: 推荐方案 为了确保在重启Ubuntu服务器后,让springboot的服务test.jar象 nohup java -ja…...
python系列教程237——启动扩展功能
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...

U盘格式化工具合集:6个免费的U盘格式化工具
在日常使用中,U盘可能会因为文件系统不兼容、数据损坏或使用需求发生改变而需要进行格式化。一个合适的格式化工具不仅可以清理存储空间,还能解决部分存储问题。本文为大家精选了6款免费的U盘格式化工具,并详细介绍它们的功能、使用方法、优缺…...

循环神经网络(RNN)入门指南:从原理到实践
目录 1. 循环神经网络的基本概念 2. 简单循环网络及其应用 3. 参数学习与优化 4. 基于门控的循环神经网络 4.1 长短期记忆网络(LSTM) 4.1.1 LSTM的核心组件: 4.2 门控循环单元(GRU) 5 实际应用中的优化技巧 5…...
马原复习笔记
文章目录 前言导论物质实践人类社会资本主义社会主义共产主义后记 前言 一月二号下午四点多考试,很友好,不是早八,哈哈哈。之前豪言壮语和朋友说这次马原要全对,多做了几次测试之后,发现总有一些知识点是自己不知道的…...
Android Room 框架的初步使用
一、简介 Room 是一个强大的对象关系映射库,它允许你将 SQLite 数据库中的表映射到 Java 或 Kotlin 的对象(称为实体)上。你可以使用简单的注解(如 Entity、Dao 和 Database)来定义数据库表、数据访问对象(…...
什么是过度拟合和欠拟合?
在机器学习中,当一个算法的预测非常接近或者直接等于它的训练数据,导致不能够准确预测除了训练数据以外的数据,我们把这种情况称为过度拟合。算法能够非常接近甚至就是训练的数据,是个非常好的事,但是它不能准确预测除…...
DotnetSpider实现网络爬虫
1. 使用DotnetSpider框架 DotnetSpider是一个开源的、轻量、灵活、高性能、跨平台的分布式网络爬虫框架,适用于.NET平台。它可以帮助开发者快速实现网页数据的抓取功能。 1.1 安装DotnetSpider NuGet包 首先,你需要在你的.NET项目中安装DotnetSpider NuGet包。你可以通过…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...