千家信息网

Python之Seaborn实例分析

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,今天小编给大家分享一下Python之Seaborn实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2025年11月11日Python之Seaborn实例分析

今天小编给大家分享一下Python之Seaborn实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 安装 seaborn

安装:

pip install seaborn

导入:

import seaborn as sns


2.准备数据

正式开始之前我们先用如下代码准备一组数据,方便展示使用。

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snspd.set_option('display.unicode.east_asian_width', True)df1 = pd.DataFrame(    {'数据序号': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],     '厂商编号': ['001', '001', '001', '002', '002', '002', '003', '003', '003', '004', '004', '004'],     '产品类型': ['AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC'],     'A属性值': [40, 70, 60, 75, 90, 82, 73, 99, 125, 105, 137, 120],     'B属性值': [24, 36, 52, 32, 49, 68, 77, 90, 74, 88, 98, 99],     'C属性值': [30, 36, 55, 46, 68, 77, 72, 89, 99, 90, 115, 101]    })print(df1)

生成一组数据如下:

        


3.背景与边框


3.1 设置背景风格

设置风格使用的是sns.set_style()方法,且这里内置的风格,是用背景色表示名字的,但是实际内容不限于背景色。

sns.set_style()


可以选择的背景风格有:

  • whitegrid  白色网格

  • dark  灰色背景

  • white  白色背景

  • ticks  四周带刻度线的白色背景


sns.set()

sns.set_style("darkgrid")

sns.set_style("whitegrid")

sns.set_style("dark")

sns.set_style("white")

sns.set_style("ticks")

  其中sns.set()表示使用自定义样式,如果没有传入参数,则默认表示灰色网格背景风格。如果没有set()也没有set_style(),则为白色背景。

  一个可能的bug:使用relplot()方法绘制出的图像,"ticks"样式无效。


3.3 其他

  seaborn库是基于matplotlib库而封装的,其封装好的风格可以更加方便我们的绘图工作。而matplotlib库常用的语句,在使用seaborn库时也依然有效。

  关于设置其他风格相关的属性,如字体,这里有一个细节需要注意的是,这些代码必须写在sns.set_style()的后方才有效。如将字体设置为黑体(避免中文乱码)的代码:

plt.rcParams['font.sans-serif'] = ['SimHei']

  如果在其后方设置风格,则设置好的字体会设置的风格覆盖,从而产生警告。其他属性也同理。


3.2 边框控制

sns.despine()方法

# 移除顶部和右部边框,只保留左边框和下边框sns.despine()# 使两个坐标轴相隔一段距离(以10长度为例)sns.despine(offet=10,trim=True)# 移除左边框sns.despine(left=True)# 移除指定边框 (以只保留底部边框为例)sns.despine(fig=None, ax=None, top=True, right=True, left=True, bottom=False, offset=None, trim=False)

4. 绘制 散点图

使用seaborn库 绘制散点图,可以使用replot()方法,也可以使用scatter()方法。

replot方法的参数kind默认是'scatter',表示绘制散点图。
hue参数表示 在该一维度上,用颜色区分

①对A属性值和数据序号绘制散点图,红色散点,灰色网格,保留左、下边框

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei']
sns.relplot(x='数据序号', y='A属性值', data=df1, color='red')
plt.show()

      


②对A属性值和数据序号绘制散点图,散点根据产品类型的不同显示不同的颜色,
白色网格,左、下边框:

sns.set_style('whitegrid')
plt.rcParams['font.sans-serif'] = ['SimHei']
sns.relplot(x='数据序号', y='A属性值', hue='产品类型', data=df1)
plt.show()

       


③将A属性、B属性、C属性三个字段的值用不同的样式绘制在同一张图上(绘制散点图),x轴数据是[0,2,4,6,8…]
ticks风格(四个方向的框线都要),字体使用楷体

sns.set_style('ticks')
plt.rcParams['font.sans-serif'] = ['STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2['A属性值'], df2['B属性值'], df2['C属性值']]
sns.scatterplot(data=dfs)
plt.show()

       


5. 绘制 折线图

使用seaborn库绘制折线图, 可以使用replot()方法,也可以使用lineplot()方法。

5.1 使用 replot()方法

sns.replot()默认绘制的是散点图,绘制折线图只需吧参数kind改为"line"。

需求:绘制A属性值与数据序号的折线图,
灰色网格,全局字体为楷体;并调整标题、两轴标签 的字体大小,
以及坐标系与画布边缘的距离(设置该距离是因为字体没有显示完全):

sns.set(rc={'font.sans-serif': "STKAITI"})
sns.relplot(x='数据序号', y='A属性值', data=df1, color='purple', kind='line')
plt.title("绘制折线图", fontsize=18)
plt.xlabel('num', fontsize=18)
plt.ylabel('A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

              



需求:绘制不同产品类型的A属性折线(三条线一张图),whitegrid风格,字体楷体。

sns.set_style("whitegrid")
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.relplot(x='数据序号', y='A属性值', hue='产品类型', data=df1, kind='line')
plt.title("绘制折线图", fontsize=18)
plt.xlabel('num', fontsize=18)
plt.ylabel('A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

         



  需求:将A属性、B属性、C属性三个字段的值用不同的样式绘制在同一张图上(绘制折线图),x轴数据是[0,2,4,6,8…]
  darkgrid风格(四个方向的框线都要),字体使用楷体,并加入x轴标签,y轴标签和标题。边缘距离合适。

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2['A属性值'], df2['B属性值'], df2['C属性值']]
sns.relplot(data=dfs, kind="line")
plt.title("绘制折线图", fontsize=18)
plt.xlabel('num', fontsize=18)
plt.ylabel('A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

          



  多重子图

横向多重子图 col

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.relplot(data=df1, x="A属性值", y="B属性值", kind="line", col="厂商编号")
plt.subplots_adjust(left=0.05, right=0.95, bottom=0.1, top=0.9)
plt.show()

纵向多重子图 row

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.relplot(data=df1, x="A属性值", y="B属性值", kind="line", row="厂商编号")
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.95)
plt.show()

             


5.2 使用 lineplot()方法

使用lineplot()方法绘制折线图,其他细节基本同上,示例代码如下:

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.lineplot(x='数据序号', y='A属性值', data=df1, color='purple')
plt.title("绘制折线图", fontsize=18)
plt.xlabel('num', fontsize=18)
plt.ylabel('A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

        


sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2['A属性值'], df2['B属性值'], df2['C属性值']]
sns.lineplot(data=dfs)
plt.title("绘制折线图", fontsize=18)
plt.xlabel('num', fontsize=18)
plt.ylabel('A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

        


6. 绘制直方图 displot()

绘制直方图使用的是sns.displot()方法

bins=6 表示 分成六个区间绘图
rug=True 表示在x轴上显示观测的小细条
kde=True表示显示核密度曲线

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.displot(data=df1[['C属性值']], bins=6, rug=True, kde=True)
plt.title("直方图", fontsize=18)
plt.xlabel('C属性值', fontsize=18)
plt.ylabel('数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

        


随机生成300个正态分布数据,并绘制直方图,显示核密度曲线

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
np.random.seed(13)
Y = np.random.randn(300)
sns.displot(Y, bins=9, rug=True, kde=True)
plt.title("直方图", fontsize=18)
plt.xlabel('C属性值', fontsize=18)
plt.ylabel('数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

             


7. 绘制条形图 barplot()

绘制条形图使用的是barplot()方法

以产品类型 字段数据作为x轴数据,A属性值数据作为y轴数据。按照厂商编号字段的不同进行分类。
具体如下:

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.barplot(x="产品类型", y='A属性值', hue="厂商编号", data=df1)
plt.title("条形图", fontsize=18)
plt.xlabel('产品类型', fontsize=18)
plt.ylabel('数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

         


8. 绘制线性回归模型

绘制线性回归模型使用的是lmplot()方法。
主要的参数为x, y, data。分别表示x轴数据、y轴数据和数据集数据。

除此之外,同上述所讲,还可以通过hue指定分类的变量;
通过col指定列分类变量,以绘制 横向多重子图;
通过row指定行分类变量,以绘制 纵向多重子图;
通过col_wrap控制每行子图的数量;
通过size可以控制子图的高度;
通过markers可以控制点的形状。

下边对 X属性值 和 Y属性值 做线性回归,代码如下:

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.lmplot(x="A属性值", y='B属性值', data=df1)
plt.title("线性回归模型", fontsize=18)
plt.xlabel('A属性值', fontsize=18)
plt.ylabel('B属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

           


9. 绘制 核密度图 kdeplot()

9.1 一般核密度图

绘制和密度图,可以让我们更直观地看出样本数据的分布特征。绘制核密度图使用的方法是kdeplot()方法。

对A属性值和B属性值绘制核密度图,
将shade设置为True可以显示包围的阴影,否则只有线条。

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.kdeplot(df1["A属性值"], shade=True, data=df1, color='r')
sns.kdeplot(df1["B属性值"], shade=True, data=df1, color='g')
plt.title("核密度图", fontsize=18)
plt.xlabel('Value', fontsize=18)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

         


9.2 边际核密度图

绘制边际核密度图时使用的是sns.jointplot()方法。参数kind应为"kde"。使用该方法时,默认使用的是dark样式。且不建议手动添加其他样式,否则可能使图像无法正常显示。

plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.jointplot(x=df1["A属性值"], y=df1["B属性值"], kind="kde", space=0)
plt.show()

        


10. 绘制 箱线图 boxplot()

绘制箱线图使用到的是boxplot()方法。
基本的参数有x, y, data。

除此之外 还可以有
hue 表示分类字段
width 可以调节箱体的宽度
notch 表示中间箱体是否显示缺口,默认False不显示。

鉴于前边的数据数据量不太够不便展示,这里再生成一组数据:

np.random.seed(13)
Y = np.random.randint(20, 150, 360)
df2 = pd.DataFrame(
{'厂商编号': ['001', '001', '001', '002', '002', '002', '003', '003', '003', '004', '004', '004'] * 30,
'产品类型': ['AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC'] * 30,
'XXX属性值': Y
}
)


生成好后,开始绘制箱线图:

plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.boxplot(x='产品类型', y='XXX属性值', data=df2)
plt.show()

        


交换x、y轴数据后:

plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.boxplot(y='产品类型', x='XXX属性值', data=df2)
plt.show()

可以看到箱线图的方向也随之改变

        


将厂商编号作为分类字段:

plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.boxplot(x='产品类型', y='XXX属性值', data=df2, hue="厂商编号")
plt.show()

        


11. 绘制 提琴图 violinplot()

提琴图结合了箱线图和核密度图的特征,用于展示数据的分布形状。
使用violinplot()方法绘制提琴图。

plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.violinplot(x='产品类型', y='XXX属性值', data=df2)
plt.show()

        


plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.violinplot(x='XXX属性值', y='产品类型', data=df2)
plt.show()

        


plt.rcParams['font.sans-serif'] = ['STKAITI']
sns.violinplot(x='产品类型', y='XXX属性值', data=df2, hue="厂商编号")
plt.show()

        


12. 绘制 热力图 heatmap()

以双色球中奖号码数据为例绘制热力图,这里数据采用随机数生成。

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

sns.set()
plt.figure(figsize=(6,6))
plt.rcParams['font.sans-serif'] = ['STKAITI']

s1 = np.random.randint(0, 200, 33)
s2 = np.random.randint(0, 200, 33)
s3 = np.random.randint(0, 200, 33)
s4 = np.random.randint(0, 200, 33)
s5 = np.random.randint(0, 200, 33)
s6 = np.random.randint(0, 200, 33)
s7 = np.random.randint(0, 200, 33)
data = pd.DataFrame(
{'一': s1,
'二': s2,
'三': s3,
'四':s4,
'五':s5,
'六':s6,
'七':s7
}
)

plt.title('双色球热力图')
sns.heatmap(data, annot=True, fmt='d', lw=0.5)
plt.xlabel('中奖号码位数')
plt.ylabel('双色球数字')
x = ['第1位', '第2位', '第3位', '第4位', '第5位', '第6位', '第7位']
plt.xticks(range(0, 7, 1), x, ha='left')
plt.show()

        

以上就是"Python之Seaborn实例分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

属性 数据 方法 线图 产品 类型 风格 密度 背景 厂商 序号 字体 边框 不同 参数 字段 样式 分类 代码 白色 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全进一步明确责任人 英语加网络安全能到哪里就业 网络技术哪所大学实力最强 lin服务器文件管理工具 石家庄橙芽网络技术有限公司 数据库的分页方式 数据库写压力过大 湖北app软件开发价钱是多少 成都软件开发培训哪个好 不履行网络安全义务怎么处理 制作游戏软件开发 现实网络安全问题 华为1288服务器设置虚拟化 电大数据库本科期末试题 数据库注册流程 百家号科技领域和互联网领域 汽车自动气候控制软件开发多少钱 德国大众防盗服务器什么时候开通 怎么清楚浏览数据库 怎么把数据库迁移到手机 数据库原理及应用课程简介 电脑服务器终端向别的国家收费吗 易龙互联网科技有限公司 提供定制软件开发 制作游戏软件开发 网络安全协议和网络认证技术 深圳工业软件开发哪家便宜 桂林市网络安全保卫支队支队长 dell服务器T30管理口 dsp 集成软件开发环境
0