0

0

Python怎样实现数据可视化?seaborn绘图

爱谁谁

爱谁谁

发布时间:2025-08-14 13:42:02

|

903人浏览过

|

来源于php中文网

原创

python怎样实现数据可视化?seaborn绘图

Python实现数据可视化,尤其是用Seaborn,在我看来是既高效又美观的选择。它基于Matplotlib,但提供了更高级的接口和更漂亮的默认样式,特别适合统计图形的绘制。如果你想快速探索数据,或者需要制作出版级别的图表,Seaborn绝对值得一试。

解决方案

要用Python和Seaborn进行数据可视化,通常的流程是这样的:

首先,你需要确保安装了必要的库。如果还没有,可以通过pip安装

pip install pandas matplotlib seaborn

接着,我们导入这些库,这是每次开始绘图的起点。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 为了让图表显示中文,并避免负号显示问题,通常会做一些设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题

# 也可以设置Seaborn的默认风格,让图表看起来更专业
sns.set_theme(style="whitegrid") # 尝试不同的风格,比如 "darkgrid", "white", "dark", "ticks"

然后,我们需要一些数据来绘制。Seaborn自带了一些数据集,非常适合学习和演示。

立即学习Python免费学习笔记(深入)”;

# 加载一个内置数据集,比如 'tips' (餐厅小费数据)
df = sns.load_dataset("tips")
print(df.head())

现在,我们可以开始绘制各种图表了。

1. 散点图 (Scatter Plot) 用来展示两个连续变量之间的关系。

# 绘制总账单与小费的散点图
sns.scatterplot(x="total_bill", y="tip", data=df)
plt.title("总账单与小费的关系")
plt.xlabel("总账单 (美元)")
plt.ylabel("小费 (美元)")
plt.show()

2. 直方图 (Histogram) 和 核密度估计图 (KDE Plot) 用于展示单个变量的分布情况。

# 绘制小费的直方图和KDE图
sns.histplot(df["tip"], kde=True, bins=10) # bins参数可以控制直方图的柱子数量
plt.title("小费分布")
plt.xlabel("小费 (美元)")
plt.ylabel("频数")
plt.show()

3. 条形图 (Bar Plot) 通常用于展示分类变量的聚合统计量(如均值、计数)。

# 绘制每天的平均总账单
sns.barplot(x="day", y="total_bill", data=df, errorbar=None) # errorbar=None 移除误差棒
plt.title("每日平均总账单")
plt.xlabel("星期")
plt.ylabel("平均总账单 (美元)")
plt.show()

4. 箱线图 (Box Plot) 展示数值型变量在不同类别下的分布情况,包括中位数、四分位数和异常值。

# 绘制午餐和晚餐的总账单分布
sns.boxplot(x="time", y="total_bill", data=df)
plt.title("午餐与晚餐总账单分布")
plt.xlabel("用餐时间")
plt.ylabel("总账单 (美元)")
plt.show()

5. 关系图 (Relational Plot) - 进阶

relplot
是一个非常强大的函数,可以创建散点图或折线图,并支持通过
col
row
hue
size
style
等参数,在多个维度上进行切分和可视化。

# 使用relplot展示不同性别在不同用餐时间的小费与总账单关系
sns.relplot(x="total_bill", y="tip", hue="sex", col="time", data=df, kind="scatter")
plt.suptitle("不同性别和用餐时间下的小费与总账单关系", y=1.02) # y参数调整主标题位置
plt.show()

这只是Seaborn功能的一小部分。它的魅力在于,通过简单的函数调用,就能生成非常复杂的统计图表,而且默认样式通常就很好看,省去了大量的调整工作。

Seaborn与Matplotlib有何不同,我该如何选择?

这几乎是我每次教别人数据可视化时都会被问到的问题。简单来说,Matplotlib是Python绘图的“基石”,它提供了非常底层、细致的控制能力,你可以精确到每个像素、每条线。你可以把它想象成一个拥有所有工具的巨大画室,从画笔、颜料到画布,一切都由你掌控。但这也意味着,画一幅复杂的画需要你亲手去调配颜色、描绘线条,代码量可能会比较大。

而Seaborn呢,它就像是Matplotlib上的一套“高级定制套装”。它封装了Matplotlib的许多底层功能,专门针对统计数据可视化进行了优化。它提供了一系列预设的、美观的图表类型,比如各种分布图、关系图、分类图等。用Seaborn,你不再需要关注那么多细节,只需要告诉它你想看什么类型的数据关系,它就能以一种非常漂亮且符合统计学习惯的方式呈现出来。对我来说,它就像是那种自带滤镜和模板的绘图软件,让你能更快地画出“看起来很专业”的图。

如何选择?

  • 选择Matplotlib:

    • 当你需要高度定制化的图表时:比如特定的布局、嵌入到GUI应用中、或者你需要绘制一些非常规的、非统计类型的图(比如信号处理波形)。
    • 当你需要对图表的每一个细节进行精确控制时:字体大小、线条粗细、颜色渐变、坐标轴范围等等,Matplotlib能给你最大的自由度。
    • 当你绘制的图表逻辑非常简单,用Matplotlib几行代码就能搞定,引入Seaborn反而显得多余时。
  • 选择Seaborn:

    • 当你主要进行探索性数据分析(EDA)时:Seaborn能让你快速概览数据的分布、变量间的关系,效率非常高。
    • 当你需要绘制统计图表时:比如直方图、KDE图、箱线图、小提琴图、散点图矩阵、热力图等,Seaborn的函数设计和默认样式都非常适合。
    • 当你追求图表的美观性,希望它们看起来更专业、更符合学术或商业报告风格时。
    • 当你希望用更少的代码实现更复杂的统计图表时,特别是涉及多个分类变量的组合分析。

实际上,我个人最常用的方法是结合使用。我会用Seaborn来快速生成核心的统计图表,因为它默认样式好看,代码量少。然后,如果我需要对图表的标题、坐标轴标签、图例位置等进行微调,或者需要在一个大的画布上组合多个子图,我就会用Matplotlib的函数(比如

plt.title()
,
plt.xlabel()
,
plt.figure()
,
plt.subplot()
等)来进行补充。它们俩配合起来,简直是如虎添翼。

使用Seaborn进行数据可视化时,有哪些常见的陷阱或技巧?

我在用Seaborn绘图的过程中,也踩过一些坑,也总结了一些小技巧。这不像教科书上写的那么完美,但都是实战中摸索出来的。

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载

常见的陷阱:

  1. 数据类型误解: Seaborn很“智能”,它会根据你传入的数据类型来猜测你想要绘制的图表类型。比如,如果你把一个数值型数据当作分类变量传给
    x
    轴,它可能依然会画出来,但结果可能不是你想要的。我记得有一次,我把一个表示年份的整数列当成了连续变量,结果画出来的散点图密密麻麻,根本看不出趋势,后来才意识到应该把它转成分类变量或者用更合适的聚合方式。
  2. 过度绘图(Overplotting): 当你的散点图数据点太多时,所有点都堆积在一起,形成一个黑乎乎的块,根本看不清分布。这时,仅仅用
    scatterplot
    可能就不够了。
  3. 默认颜色和样式不总是最佳: 虽然Seaborn的默认样式通常很美观,但对于某些特定数据集或报告要求,默认颜色可能不够突出重点,或者对于色盲用户不友好。我曾经因为默认的蓝色和橙色在某个报告中不够醒目而不得不手动调整。
  4. 误读聚合函数
    barplot
    这类图,默认会显示均值和误差棒。但如果你不清楚数据分布,只看均值可能会忽略掉很多信息。比如,两组数据的均值可能相同,但一组数据非常集中,另一组数据则非常分散。这时候,箱线图或小提琴图可能更合适。
  5. 不设置图表大小: 默认图表大小在Jupyter Notebook里可能看着还行,但一旦保存成图片或者嵌入到文档里,可能会显得过小或过大,文字看不清。

实用技巧:

  1. 善用
    hue
    size
    style
    这三个参数是Seaborn的精髓。它们能让你在二维图表上额外展示一个、甚至两个或三个维度的数据信息,极大地提升图表的表达力。比如,在散点图中用
    hue
    区分不同类别,用
    size
    表示第三个数值变量的大小,用
    style
    表示第四个分类变量的形状。
  2. 灵活运用
    relplot
    displot
    这两个函数是Seaborn 0.9版本后引入的,它们是
    scatterplot
    /
    lineplot
    histplot
    /
    kdeplot
    等函数的“高级封装”。它们最大的优势在于,可以通过
    col
    row
    参数轻松实现“小多图”(Facet Grid),非常适合对比不同子集的数据分布或关系。我发现用它们来做初始的EDA,效率是最高的。
  3. 调整图表大小: 始终记得在绘制图表前或后,用
    plt.figure(figsize=(width, height))
    来设置图表的尺寸。这是确保图表清晰可读的关键一步。
  4. 探索不同图表类型: 不要局限于一种图表。对于同一组数据,尝试用散点图看关系,用直方图看分布,用箱线图看统计量,用热力图看相关性。不同的图表能从不同角度揭示数据的故事。
  5. 自定义颜色和主题:
    sns.set_palette()
    可以设置全局的颜色板,
    sns.set_theme()
    sns.set_style()
    可以调整图表整体风格。如果需要更精细的控制,可以传入自定义的颜色列表,或者使用
    matplotlib.colors
    模块来创建颜色映射。
  6. 处理过度绘图: 当散点图点太多时,可以尝试:
    • 使用
      alpha
      参数调整点的透明度:
      sns.scatterplot(..., alpha=0.5)
    • 使用
      kdeplot
      histplot
      的二维版本(如
      sns.histplot(x, y)
      )来显示密度。
    • 使用
      jointplot
      ,它会在主图周围添加边缘分布图。
    • 对数据进行采样或聚合。

这些技巧和陷阱,其实都是在使用过程中逐渐积累的经验,没有一劳永逸的解决方案,关键在于多尝试,多思考数据背后的含义。

如何让Seaborn图表更具表现力并适应不同场景?

让Seaborn图表更具表现力,这就像给你的数据讲故事,你需要选择合适的“语调”和“表情”。而适应不同场景,则要求你的图表能够灵活地服务于不同的展示需求,无论是报告、演示还是网页嵌入。

提升表现力:

  1. 选择正确的“语调”——主题和风格: Seaborn提供了几种内置主题,如

    darkgrid
    whitegrid
    dark
    white
    ticks
    。通过
    sns.set_theme(style="whitegrid")
    sns.set_style("dark")
    ,你可以快速切换图表的整体视觉风格。我发现
    whitegrid
    在大多数报告中都很通用,而
    dark
    模式在某些深色背景的演示中效果很棒。除了样式,颜色也是“语调”的一部分。
    sns.set_palette()
    可以让你选择不同的颜色方案,比如
    "pastel"
    "muted"
    "bright"
    "dark"
    "colorblind"
    等,甚至是自定义的颜色列表。选择一个与你的品牌或内容氛围相符的调色板,能让图表看起来更专业、更有感染力。

  2. 强调关键信息——注释和标签:

    • 标题和轴标签: 这是最基础的,但也是最重要的。一个清晰的
      plt.title()
      plt.xlabel()
      plt.ylabel()
      能让读者一眼明白图表的主题和各轴代表的含义。我见过太多没有标签的图,简直是“无字天书”。
    • 图例: 当你使用
      hue
      size
      style
      等参数时,Seaborn会自动生成图例。确保图例的位置不会遮挡数据,并且文字清晰。
      plt.legend()
      可以帮助你调整图例的位置。
    • 数据点注释: 如果你需要突出某个特定的数据点或区域,可以使用Matplotlib的
      plt.text()
      ax.annotate()
      来添加文字说明或箭头。这对于解释异常值或关键趋势非常有用。
  3. 多维度叙事——分面(Faceting): 这是Seaborn的杀手锏之一。通过

    sns.FacetGrid
    relplot
    displot
    中的
    col
    row
    参数,你可以将一个大的数据集根据一个或多个分类变量拆分成多个子图。每个子图展示一个子集的数据,这让对比不同类别的数据分布或关系变得异常清晰。比如,我想看不同性别、不同吸烟习惯的人在总账单和小费上的关系,用
    relplot(..., col="sex", row="smoker")
    就能一目了然。这种“小多图”的布局,比在一个图上堆叠所有信息要有效得多。

适应不同场景:

  1. 输出格式多样性: 你的图表可能需要用于网页、Word文档、PPT或者印刷品。Matplotlib和Seaborn都支持将图表保存为多种格式:

    • PNG/JPG: 适用于网页和屏幕显示,文件小,但放大后会失真。
      plt.savefig('my_plot.png', dpi=300)
      dpi
      参数控制分辨率。
    • SVG: 矢量图格式,放大不失真,适合网页和需要高质量缩放的场景。
      plt.savefig('my_plot.svg')
    • PDF: 矢量图格式,适合印刷和高质量文档。
      plt.savefig('my_plot.pdf')
      选择合适的格式,确保图表在目标介质上清晰可见。
  2. 响应式布局和尺寸: 虽然Seaborn本身没有内置“响应式”的概念,但你可以通过Matplotlib来控制图表的尺寸。当你在Jupyter Notebook中工作时,

    plt.figure(figsize=(width, height))
    能控制图表的初始大小。在发布到Web时,可以考虑使用一些前端框架来控制图像的显示尺寸,或者在生成图片时就考虑好不同屏幕的比例。

  3. 处理大数据集: 对于海量数据,直接绘制所有点可能会导致性能问题和过度绘图。

    • 采样: 随机抽取一部分数据进行可视化。
    • 聚合: 将数据按某种方式聚合(如计算均值、中位数),然后绘制聚合后的结果。
    • 密度图: 对于散点图,可以使用
      sns.kdeplot(x=..., y=..., fill=True)
      sns.histplot(x=..., y=...)
      来显示数据点的密度分布,这比绘制所有点更能揭示趋势。
    • 分箱(Binning): 将连续数据分成若干个区间,然后统计每个区间内的数量或均值。

总的来说,让图表有表现力是关于“讲故事”,而适应不同场景是关于“讲故事的方式”。你需要根据你的受众、你的数据以及你想要传达的信息,来灵活地调整你的可视化策略。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

765

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

52

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 6.3万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号