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

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

前言

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


一、设置 Matplotlib 字体

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

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

python 复制代码
def set_chinese_font(font_name='SimHei'):
    """
    设置Matplotlib的中文字体。

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

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


二、Seaborn 与 Matplotlib 主题的冲突

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

python 复制代码
import seaborn as sns
sns.set(style="whitegrid")

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

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

python 复制代码
import seaborn as sns
sns.set(style="whitegrid")

# 然后设置中文字体
set_chinese_font('SimHei')

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


三、Seaborn barplot 的工作原理

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

python 复制代码
import seaborn as sns

bar_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 参数:

python 复制代码
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年参保情况"、"姓名"等列。要得到分组后的每组人数,可以这样:

python 复制代码
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 绘制各种各样的统计图表,展示数据中的分类情况、分布情况以及关系,满足日常数据分析与可视化需求。


延伸阅读

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

相关推荐
我爱挣钱我也要早睡!2 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手5 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知7 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun7 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao7 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾7 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT8 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa8 小时前
HTML和CSS学习
前端·css·学习·html
ST.J8 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin9 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全