Python精美图快速上手

news2025/2/12 11:49:05

seaborn是一个基于Python的数据可视化库,它建立在Matplotlib之上,提供了一种更简单、更美观的方式来创建统计图形。seaborn旨在帮助用户轻松地生成有吸引力和信息丰富的可视化结果。

以下是seaborn库的一些主要特点:

  1. 美观的默认样式:seaborn通过提供现成的样式和颜色主题,使得创建各种类型的图形变得更加简单。它的默认样式经过精心设计,使得图表具有更高的可读性和美观度。

  2. 内置的统计图形:seaborn提供了一系列内置的统计图形,例如柱状图、箱型图、散点图、折线图等。这些图形不仅易于使用,还具有各种选项和参数,可以帮助你更好地展示和理解数据。

  3. 数据集可视化:seaborn还包含一些内置的示例数据集,这些数据集可以直接在库中使用。你可以使用这些数据集来快速生成演示图表,同时也可以将它们作为学习和实践的基础。

  4. 统计功能增强:seaborn提供了许多额外的统计功能,使得数据探索更加方便。例如,你可以使用seaborn轻松地绘制分布图、拟合回归线、绘制核密度图等。

  5. 多变量数据可视化:Seaborn提供了一些强大的工具来可视化多变量数据。你可以使用Seaborn绘制矩阵图、热力图、聚类图等,以揭示不同变量之间的关系和模式。

导入内置数据

In [1]:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

import seaborn as sns

导入seaborn内置的消费数据集:

In [2]:

tips = sns.load_dataset("tips")  # 需要网络环境
tips.head()

Out[2]:

导入iris数据集:

In [3]:

iris = sns.load_dataset("iris")  # 需要网络环境
iris

Out[3]:

下面的图形主要是基于两份数据进行绘制,包含的图形有:

  • 散点图sns.scatter

  • 回归散点图sns.lmplot

  • 分类散点图sns.stripplot

  • 分簇散点图sns.swarmplot

  • 柱状图sns.barplot

  • 计数柱状图sns.countplot

  • 直方图sns.histplot

  • 分布图sns.displot

  • 箱型图sns.boxplot

  • 小提琴图sns.violin

  • 热力图sns.heatmap

  • 聚类热图sns.clustermap

  • 分类图sns.catplot

  • 多图网格sns.FaceGrid

希望帮助读者快速上手seaborn绘图,文章有点长,欢迎点赞收藏。

散点图sns.scatterplot

基础散点图

In [4]:

sns.scatterplot(x="total_bill",y="tip",data=tips)

plt.title("basic scatter with seaborn")  # 添加标题

plt.show()

进阶散点图

指定散点的大小:

In [5]:

sns.scatterplot(x="total_bill",
                y="tip",
                size="size", # 指定散点大小
                data=tips)

plt.title("better scatter with seaborn")  # 添加标题

plt.show()

指定hue进行分组:

In [6]:

sns.scatterplot(x="total_bill",
                y="tip",
                hue="day", # 指定散点大小
                data=tips)

plt.title("better scatter with seaborn")  # 添加标题

plt.show()

回归散点图sns.lmplot

显示散点图中回归趋势线:使用lmplot方法

In [7]:

sns.lmplot(x="total_bill",
            y="tip",
            hue="time", # 分组
            data=tips)

plt.title("better scatter with seaborn")  # 添加标题

plt.show()

分类散点图sns.stripplot

默认情况

在默认情况下,只会对数据中数值型字段进行绘图:

In [8]:

sns.stripplot(data=tips)

plt.show()

通过参数orient设置水平或者垂直:

In [9]:

sns.stripplot(data=tips,orient="h")

plt.show()

基础分类散点图

指定x或者y

In [10]:

# 水平
sns.stripplot(data=tips, x="tip")

plt.show()

指定为y轴绘图:

In [11]:

# 垂直
sns.stripplot(data=tips, y="tip")

plt.show()

进阶分类散点图

水平方向:

In [12]:

sns.stripplot(data=tips, x="tip",y="day")

plt.show()

垂直方向:

In [13]:

sns.stripplot(data=tips, x="day", y="tip")

plt.show()

通过hue指定分组:

In [14]:

sns.stripplot(data=tips, x="day", y="tip", hue="smoker")

plt.show()

设置多个其他参数:

In [15]:

sns.stripplot(
    data=tips, # 指定数据、x、y轴
    x="total_bill", 
    y="day", 
    hue="time",  # 分组字段
    jitter=False,   # 抖动点
    s=20,  # 控制点的大小
    marker="D",  # D-方形  S-圆点
    linewidth=1,  # 线宽
    alpha=.3  # 透明度
)

plt.show()

分簇散点图sns.swarmplot

默认情况

在默认情况下,只会对数据中数值型字段进行绘图:

In [16]:

sns.swarmplot(data=tips)

plt.show()

通过orient指定水平方向:

In [17]:

sns.swarmplot(data=tips,orient='h')

plt.show()

基础分簇散点图

In [18]:

# 水平
sns.swarmplot(data=tips, x="total_bill")

plt.show()

指定在y轴上绘图:

In [19]:

# 水平
sns.swarmplot(data=tips, y="total_bill")

plt.show()

同时指定x和y

In [20]:

sns.swarmplot(data=tips,x="time", y="total_bill")

plt.show()

进阶分簇散点图

In [21]:

sns.swarmplot(data=tips,
              x="time", 
              y="total_bill",
              hue="day", # 指定分组字段
              marker="*",  # 设置marker  默认是圆点
              size=7,  # 设置marker大小
              linewidth=0.5  # 设置线宽
             )

plt.show()

柱状图sns.barplot

基础柱状图

如果只给定x和y,barplot方法实际上进行一个聚合汇总求均值的操作:

In [22]:

tips.groupby("day")["tip"].mean()

Out[22]:

day
Fri     2.734737
Sat     2.993103
Sun     3.255132
Thur    2.771452
Name: tip, dtype: float64

In [23]:

sns.barplot(data=tips,x="day",y="tip")

plt.show()

进阶柱状图

hue参数指定分组的字段:

In [24]:

sns.barplot(
    data=tips,
    x="day",
    y="tip",
    hue="smoker"  # 指定分组字段
    )

plt.show()

order参数指定x轴label的顺序:

In [25]:

sns.barplot(
    data=tips,
    x="day",
    y="tip",
    hue="smoker",  # 指定分组
    order=["Thur","Fri","Sat","Sun"] # 指定x轴label的顺序
    )

plt.show()

水平柱状图

orient参数指定水平h或者垂直v

In [26]:

sns.barplot(
    data=tips,
    x="tip",  # x轴的数据必须为数值
    y="day",
    hue="smoker",
    orient="h"
    )

plt.show()

计数柱状图sns.countplot

用于统计DataFrame中某个字段的不同取值数量。比如我们想统计sex中不同性别下的人数:

In [27]:

tips.groupby("sex").size()

Out[27]:

sex
Female     87
Male      157
dtype: int64

可以看到统计结果:Female是87人,Male是157人

In [28]:

# 写法1
# sns.countplot(tips["sex"])

# 写法2
sns.countplot(data=tips,x="sex")
plt.show()

也可以指定不同的分组:

In [29]:

sns.countplot(data=tips,
              x="sex",
              hue="day"  # 指定分组
             )

plt.show()

绘制水平柱状图:

In [30]:

sns.countplot(data=tips,
              y="sex",  # 将x改成y即可
              hue="day"  # 指定分组
             )

plt.show()

直方图sns.histplot

默认情况

如果不传入x和y,默认是对DataFrame中所有的数值字段进行操作:

In [31]:

sns.histplot(data=tips)

plt.show()

基础直方图

传入x或者y的情况:

In [32]:

sns.histplot(data=tips,x="tip")
# sns.histplot(x=tips["tip"])  等价

plt.show()

In [33]:

# fill表示是否填充柱子
sns.histplot(data=tips,x="tip",fill=False)  

plt.show()

改成水平方向柱状图:

In [34]:

sns.histplot(data=tips,y="tip")
# sns.histplot(y=tips["tip"])  等价

plt.show()

进阶直方图

binwidth控制每个柱子的宽度;bins控制柱子的个数

In [35]:

sns.histplot(data=tips,x="tip",binwidth=0.1,bins=50)

plt.show()

kde开启直方图与核密度图同时显示:

In [36]:

sns.histplot(data=tips,x="tip",kde=True)

plt.show()

In [37]:

sns.histplot(data=tips,x="tip",hue="day") # 指定分组情况

plt.show()

In [38]:

sns.histplot(data=tips,
             x="tip",
             hue="day",
             multiple="stack"  # 以堆叠的形式显示
            ) 

plt.show()

In [39]:

sns.histplot(data=tips,
             x="tip", 
             hue="day",# 分组
             stat="density", # 密度图(y轴刻度)
             element="step")  # bars  step  poly ;控制密度图显示方式,默认bars

plt.show()

In [40]:

sns.histplot(data=tips,
             x="tip", 
             hue="day",# 分组
             stat="density", # 密度图(y轴刻度)
             element="poly")  # bars step poly ;控制密度图显示方式

plt.show()

分布图sns.displot

基础分布图

默认情况下是统计DataFrame中某个属性中不同取值出现的次数:以柱状图的形式显示

In [41]:

tips.groupby("tip").size()

Out[41]:

tip
1.00     4
1.01     1
1.10     1
1.17     1
1.25     3
        ..
6.70     1
6.73     1
7.58     1
9.00     1
10.00    1
Length: 123, dtype: int64

In [42]:

sns.displot(data=tips,x="tip")
# sns.displot(data=tips["tip"])  等价

plt.show()

进阶分布图

In [43]:

sns.displot(data=tips,x="tip",hue="sex")  # 指定分组

plt.show()

使用kind参数,取值为:['hist', 'kde', 'ecdf']。hist就是上面默认的情况:

In [44]:

sns.displot(data=tips,x="tip",kind="kde")  
# sns.kdeplot(data=tips,x="tip")  等价于kdeplot

plt.show()

ecdf表示累计求和的效果:

In [45]:

# empirical cumulative distribution functions (ECDFs)

sns.displot(data=tips,x="tip",kind="ecdf")   

plt.show()

使用直方图结合核密度图:

In [46]:

sns.displot(data=tips,x="tip",kde=True)

plt.show()

箱型图sns.boxplot

基础箱型图

In [47]:

# sns.boxplot(tips["tip"])  # 等价1;默认是x=tips["tip"]
# sns.boxplot(data=tips, x="tip")  # 等价2
sns.boxplot(x=tips["tip"])
plt.show()

如果指定为y=tips["tip"],则变成垂直箱型图:

In [48]:

# sns.boxplot(data=tips, y="tip")  # 等价

sns.boxplot(y=tips["tip"])
plt.show()

同时指定x和y:

In [49]:

sns.boxplot(data=tips, x="day",y="tip")
plt.show()

交换x和y的位置变成水平箱型图:

In [50]:

sns.boxplot(data=tips, y="day",x="tip")
plt.show()

进阶箱型图

hue执行分组,此时x和y必须同时指定:

In [51]:

# hue执行分组

sns.boxplot(data=tips, x="day",y="tip",hue="sex")
plt.show()

dodge参数表示在执行hue分组的时候,不同组别下的数据是否放在一个主体中:

In [52]:

sns.boxplot(data=tips, x="day",y="tip",hue="sex",dodge=False)
plt.show()

设置多个绘图参数:

In [53]:

sns.boxplot(data=tips,
            x="day",
            y="tip",
            hue="sex",
            showcaps=False,  # 是否显示箱须(横线部分)
            notch=True  # 是否开启显示V型槽(箱体凹槽)
           )
plt.show()

小提琴图sns.violinplot

基础小提琴图

In [54]:

# sns.violinplot(tips["tip"])  # 默认是x=tips["tip"]
# sns.violinplot(x=tips["tip"])  

sns.violinplot(data=tips,x="tip")

plt.show()

垂直小提琴图:

In [55]:

# sns.violinplot(data=tips,y="tip")

sns.violinplot(y=tips["tip"])

plt.show()

进阶小提琴图

In [56]:

sns.violinplot(data=tips, x="sex",y="tip",hue="day")

plt.show()

交换x和y的位置,变成水平小提琴图:

In [57]:

# 交换x和y的位置

sns.violinplot(data=tips, y="sex",x="tip",hue="day")

plt.show()

设置其他参数:

In [58]:

sns.violinplot(data=tips, 
               y="sex",
               x="tip",
               hue="day",
               inner="stick"   # 控制内部虚线
              )

plt.show()

热力图sns.heatmap

基础热力图

指定条件下的透视表:

In [59]:

table = pd.pivot_table(tips,values="tip",columns=["day"],index=["sex"],aggfunc="mean")
table

Out[59]:

In [60]:

sns.heatmap(table)  # 默认

plt.show()

进阶热力图

In [61]:

# 显示文本信息及保留一位小数;设置线宽
sns.heatmap(table, # 数据
            annot=True,  # 显示文本
            fmt=".1f", # 保留一位小数
            linewidths=0.5,  # 设置线宽
            vmin=2,  # 颜色棒的最大值和最小值
            vmax=3.5,
            cbar=True,  # 是否显示右边的颜色棒
            cmap="crest"  # 色谱选择   cmap=sns.cubehelix_palette(as_cmap=True)
           )  

plt.show()

将x轴刻度显示在上面:

In [62]:

fig = sns.heatmap(table, annot=True,fmt=".1f")
fig.set(xlabel="",ylabel="")
fig.xaxis.tick_top()

聚类热图sns.clustermap

基础聚类热图

In [63]:

iris.dtypes

Out[63]:

sepal_length    float64
sepal_width     float64
petal_length    float64
petal_width     float64
species          object
species_id        int64
dtype: object

In [64]:

# 删除species字段,因为它的取值为字符串信息

iris_new = iris.drop("species",axis=1)
iris_new.head()

Out[64]:

默认情况下的聚类热力图:

In [65]:

sns.clustermap(iris_new)

plt.show()

进阶聚类热图

In [66]:

sns.clustermap(iris_new,
               figsize=(10,6),  # 大小
               cmap="mako",  # 色谱
               standard_scale=1,  # 是否数据缩放标准化(颜色棒取值为0到1)
               row_cluster=True,  # 是否row方向聚类效果(左侧)
              )

plt.show()

分类图sns.catplot

分类图方法sns.catplot主要是通过kind参数来指定生成不同的图形,其作用等效于对应的函数:

  • kind="box":boxplot

  • kind="violin":violinplot

  • kind="point":pointplot

  • kind="bar":barplot

  • kind="count":countplot

  • kind="strip":stripplot

  • kind="swarm":swarmplot

默认情况

在默认情况下,该函数将会生成散点图:

In [67]:

# 垂直方向

sns.catplot(data=tips,x="day",y="tip")
plt.show()

调换x和y的位置:

In [68]:

# 水平方向
sns.catplot(data=tips,y="day",x="tip")
plt.show()

kind参数

通过kind参数指定生成不同图形:

In [69]:

sns.catplot(data=tips,
            x="day",
            y="tip",
            kind="bar")
plt.show()

In [70]:

sns.catplot(data=tips,
            x="day",
            y="tip",
            kind="box")
plt.show()

In [71]:

sns.catplot(data=tips,
            x="day",
            y="tip", 
            kind="violin"
           )
plt.show()

In [72]:

sns.catplot(data=tips,
            x="day",
            y="tip",
            kind="swarm")
plt.show()

多图网格sns.FacetGrid

如何理解seaborn.FacetGrid函数?

(1)传入绘图数据

In [73]:

sns.FacetGrid(tips)

Out[73]:

(2)指定行、列元素

In [74]:

sns.FacetGrid(tips,col="day",row="sex")

Out[74]:

(3)调用map函数

In [75]:

f = sns.FacetGrid(tips,col="day",row="sex")

f.map(sns.scatterplot, "total_bill", "tip")

Out[75]:

In [76]:

f = sns.FacetGrid(tips,col="day",row="sex")

f.map(sns.violinplot, "total_bill")

In [77]:

f = sns.FacetGrid(tips,col="day",row="sex")
f.map(sns.histplot, "total_bill")

(4)调用map_dataframe函数

In [78]:

f = sns.FacetGrid(tips,col="sex",row="time")

f.map_dataframe(sns.barplot, y="total_bill")

Out[78]:

In [79]:

f = sns.FacetGrid(tips,col="day")

f.map_dataframe(sns.scatterplot, x="total_bill",y="tip")

Out[79]:

In [80]:

f = sns.FacetGrid(tips, col="time")

f.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="sex")

f.add_legend()  # 添加图例(右侧)

Out[80]:

 

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

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

相关文章

获取jar包所在路径位置,项目文件夹Path

获取jar包所在路径位置,项目文件夹位置 方法1 new ApplicationHome().getDir().getPath();方法1就是调用了方法2 System.getProperty("user.dir") System.getProperty("user.dir")String源码👇 private File findHomeDir(File source) {File…

Python 标准库 - 并发执行

Python 标准库 - 并发执行 1. 简单介绍2. 程序示例2.1 threading 编程示例2.2 multiprocessing 编程示例2.3 concurrent.futures 编程示例 1. 简单介绍 Python 标准库 非常庞大,所提供的组件涉及范围十分广泛,官方参考链接https://docs.python.org/zh-cn…

【sentinel】令牌桶算法在Sentinel中的应用

令牌桶算法 令牌桶算法介绍 令牌桶算法,又称token bucket。 从图中我们可以看到,令牌桶算法比漏桶算法稍显复杂。首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的,token以…

【深度学习】0-2 深度学习相关数学概念的简单总结-概率与信息论

样本空间 样本空间是一个实验或随机试验所有可能结果的集合,随机试验中的每个可能结果称为样本点。例如投掷一个骰子,那么样本空间就是{1,2,3,4,5,6}。 随机变量 随机变量,顾名思义…

IDEA全局设置JDK、Maven、编码格式

本机已安装JDK版本: 本机已安装Maven版本: 一、IDEA设置全局JDK设置 File---->New Projects Settings---->Structure for New Projects... 先将本地安装的JDK添加到SDK 将项目SDK设置为刚刚添加的本地JDK版本 File---->New Projects Settings-…

Webstorm 加载vue项目时,特别卡顿,完美解决。觉得有用加好友打赏

觉得有用加好友打赏:QQ:854138497 上图cpu直接干满。 根据上图提示,直接 disable hints,或者到下图的settings里面设置。 Code vision取消后,webstorm 明显就不卡了。记得重启webstorm。 还有一种方式,根…

完美解决MacOS关于ld: library not found for -lnetcdff错误

1. 问题描述 在使用Intel版本的Mac编译某个程序时出现了错误,显示如下图。 说明:libnetcdff是netcdf的Fortran的接口,如下ChatGPT解释。 2. 出现的原因 原因是Makefile中定义的静态库链接并没有在系统默认的库路径下找到,默认…

Jmeter HTTP Cookie管理器的使用

目录 前言: 1、在HTTP信息头管理器组件中添加Cookie信息 (1)测试计划内包含的元件 (2)请求取样器内容 (3)HTTP信息头管理器内容 (4)查看结果 2、使用HTTP Cookie管…

你想知道的 MySQL 性能调优方式,都在这里

前言:对于性能测试来说,数据库的监控是尤为的重要,以及对数据库进行调优,用以提升性能,是能在短期内有显著的效果的,本文针对MySQL数据库进行分析如何定位MySQL数据库的性能问题。 关键 MySQL 统计指标 如…

一张软考系统架构设计师证书到底能证明了什么?

软考证书证明你考过了软考高级架构,拥有了评高级职称的资格! 证书的作用还有: 1、以考代评:软考证书可以用来评职称 2、积分落户:可用于积分落户,加相应的分,软考高级职业资格都几乎可以直接…

Tinker 组件修复,踩坑

1、You need to use a Theme.AppCompat theme (or descendant) with this activity. 复现步骤 补丁加载成功之后重启应用,再退出应用重进闪退 日志 TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: You need to use a Theme.AppCompat th…

Cesium教程(十七):淹没分析

Cesium教程(十七):淹没分析 1、什么是淹没分析 淹没分析是根据某片区域的地形及洪水流量速度,动态模拟该地形区域水位逐渐上涨的淹没过程。该功能可适用于山区、丘陵等地形起伏较大区域,模拟洪水涨到安全限定高度的淹没过程,为防洪水救灾提供一定的参考。此外,还可以为河…

红帽认证常见答疑(二):电脑配置、实验环境和考试环境、可以自学吗

学习红帽需要配置什么样的电脑? RHCE推荐学员自己的电脑内存在16G左右,RHCA推荐学员电脑内存在32-64G,且最好配置128G以上的固态硬盘,如果自己没有该配置的电脑,誉天可以提供远程学习环境,可以随时随地连接…

Java中常用的工具类——字符串类

提示:字符串类是编程中最常用的一种数据类型,比较重要❗ 文章目录 前言一、字符串类创建对象方式静态创建动态创建 二、String字符串内容不可改变三、字符串常用方法length方法charAt方法substring方法indexOf与lastIndexOfindexOf方法lastIndexOf方法 替…

企业即时通信软件有哪些?要如何选择?

随着企业数字化转型的加速,即时通信软件已成为企业日常沟通的重要工具。但是市面上的企业即时通信软件种类繁多,如何选择适合自己企业的即时通信软件呢?本文将为大家介绍几款常用的企业即时通信软件以及如何选择。 企业微信 企业微信是腾讯公…

牛逼!Windows竟然也能运行QEMU虚拟机!

这些天研究 Miracast,又倒腾了开发用的虚拟机,但是发现了新的东西就是 QEMU ——全宇宙最强的硬件模拟器,原来这玩意可以在Windows上跑虚拟机的。 环境部署 msys2mingw-w64-qemu系统isoHyper-V 代替 KVM/Linux 安装 在 Msys2 Repo下载exe…

【服务器数据恢复】RAID5重建导致数据丢失的数据恢复案例

服务器数据恢复环境: HP某型号服务器,5块硬盘组建了一组raid5磁盘阵列。 服务器故障&分析: 服务器在工作过程中,raid5磁盘阵列中的一块磁盘掉线,由于raid5的容错特点,raid阵列未受影响,工作…

弥合风险缺口 筑牢共享安全|2023开放原子全球开源峰会开源安全技术与实践分论坛成功举办

6 月 12 日,2023 开放原子全球开源峰会开源安全技术与实践分论坛成功举办。本场论坛围绕开源软件供应链、开源漏洞信息共享机制、开源安全测试工具、人工智能新技术对开源安全领域的影响等方向分享了技术和最佳实践,讨论了开源安全领域最新产业动态。 开…

认知升维: 道、法、术、器、势

身处在严重内卷的时代,我们各方面面临转型调整,提升认知,更好适应说变就变|比翻书变脸还快的节奏,需要自身不断精进,不断挑战自我,这个世界上:一切都在变,唯独不变的是变化本身&…

enscape3.5新版本更新,神仙功能还不少

Enscape于2015年首次发布,已成为建筑可视化市场的关键工具之一,在上一次CGarchitect渲染调查中名列前十。 图片来源于CGarchitect渲染调查报告 相对于同行的其他渲染器,Enscape最大的优势在于它并未因为其易于使用特性而降低了品质&#xff…