python3之seaborn库使用

Seaborn 是 Python 中一个基于 Matplotlib 的高级数据可视化库,专注于统计图形的绘制。它提供了更简洁的 API 和美观的默认样式,特别适合数据分析和探索性数据分析。与 Pandas 深度集成‌,直接支持 DataFrame 数据结构。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(20, 10))

# 解决中文不显示和负号不显示问题
rc = {"font.family": "Microsoft YaHei", "axes.unicode_minus": False}
sns.set(style="darkgrid", palette="muted", color_codes=True, rc=rc)
# 设置横纵轴的显示以及字体大小
sns.set(style="ticks")

# 实例程序 加载示例数据集
tips = sns.load_dataset("tips")

 保存

plt.savefig("../../charts/gen/plot.jpg")
# plt.savefig("../../charts/gen/plot.pdf", dpi=200, bbox_inches="tight")

 seaborn库将图大致分为三类:关系图、分布图、分类图。

关系图

import seaborn as sns
import matplotlib.pyplot as plt


fig, axes = plt.subplots(2, 1, figsize=(10, 10))
tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")


# 散点图
ax = sns.scatterplot(x="tip", y="total_bill", hue="sex", style="time", data=tips, ax=axes[0])
ax.set_title("scatter plot", loc="center")

# 折线图
ax = sns.lineplot(x="tip", y="total_bill", hue="sex", style="time", data=tips, ax=axes[1])
ax.set_title("line plot", loc="center")


plt.savefig("../../charts/sns-rel.jpg")

 

分布图  

import seaborn as sns
import matplotlib.pyplot as plt


fig, axes = plt.subplots(2, 1, figsize=(10, 5))
tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")


# 直方图
ax = sns.histplot(data=tips, x="tip", kde=True, ax=axes[0])
ax.set_title("hist plot", loc="center")

# kdeplot:核密度估计图
# rugplot: ‌辅助标记图,在坐标轴上‌精确标记每个原始数据点的位置‌。与其他分布图(如 kdeplot 或 histplot)组合使用
ax = sns.kdeplot(data=tips, x="tip", hue="sex", ax=axes[1])
ax = sns.rugplot(data=tips, x="tip", hue="sex", ax=axes[1])
ax.set_title("rug plot & kde plot", loc="center")


fig.tight_layout(pad=2.0)  # 自动调整边距
plt.savefig("../../charts/sns-dist.png")

 

分类图

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


fig, axes = plt.subplots(6, 2, figsize=(15, 15))
tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 计数
ax = sns.countplot(data=tips, x="day", ax=axes[0, 0])
ax.set_title("count plot", loc="center")

# 条形图
ax = sns.barplot(data=tips, x="day", y="total_bill", estimator=np.mean, ax=axes[0, 1])
ax.set_title("bar plot", loc="center")

# 箱型图
ax = sns.boxplot(data=tips, x="day", y="total_bill", ax=axes[1, 0])
ax.set_title("Box plot", loc="center")
ax = sns.boxplot(data=tips, x="day", y="total_bill", hue="sex", ax=axes[1, 1])
ax.set_title("Box plot with group", loc="center")

# voilin plot和box plot很相似,但它结合了box plot图和密度痕迹
ax = sns.violinplot(data=tips, x="day", y="total_bill", ax=axes[2, 0])
ax.set_title("voilin plot", loc="center")
ax = sns.violinplot(data=tips, x="day", y="total_bill", hue="sex", dodge=True, ax=axes[2, 1])
ax.set_title("voilin plot with group", loc="center")

# 扰动点图
ax = sns.stripplot(data=tips, x="day", y="total_bill", ax=axes[3, 0])
ax.set_title("strip plot", loc="center")
ax = sns.stripplot(data=tips, x="day", y="total_bill", jitter=True, hue="sex", dodge=True, ax=axes[3, 1])
ax.set_title("strip plot with group", loc="center")

# Swarn plot和stripplot比较类似,但Swarn plot的不同之处在于它不会重叠数据点,适用于小样本
ax = sns.swarmplot(data=tips, x="day", y="total_bill", ax=axes[4, 0])
ax.set_title("Swarn plot", loc="center")
ax = sns.swarmplot(data=tips, x="day", y="total_bill", hue="sex", dodge=True, ax=axes[4, 1])
ax.set_title("Swarn plot with group", loc="center")

# ‌点图‌:比较不同分类下的数值集中趋势和置信区间‌
ax = sns.pointplot(data=tips, x="day", y="total_bill", estimator=np.mean, ax=axes[5, 0])
ax.set_title("point plot", loc="center")


fig.tight_layout(pad=2.0)  # 自动调整边距
plt.savefig("../../charts/sns-cat.png")

 

回归分析图

import seaborn as sns
import matplotlib.pyplot as plt


fig, axes = plt.subplots(2, 1, figsize=(10, 5))
tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")


# 线性回归图
ax = sns.regplot(data=tips, x="total_bill", y="tip", ax=axes[0])
ax.set_title("regplot", loc="center")

# 线性回归残差图
ax = sns.residplot(data=tips, x="total_bill", y="tip", ax=axes[1])
ax.set_title("residplot", loc="center")


fig.tight_layout(pad=2.0)  # 自动调整边距
plt.savefig("../../charts/sns-regplot.png")

 

FacetGrid

 基于分类变量创建多子图网格,每个子图展示数据的不同子集

import seaborn as sns
import matplotlib.pyplot as plt


fig = plt.figure()
tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 分面网格:基于分类变量创建多子图网格,每个子图展示数据的不同子集,使用统一类型图表
g = sns.FacetGrid(tips, col="day", row="time")
g.map(sns.histplot, "total_bill")


plt.savefig("../../charts/sns-facetgrid.png")

复合图

关系复合图
import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 关系复合图:整合scatter、line,通过kind切换,默认scatter
# 基于FacetGrid的多子图系统,支持col/row分面参数
sns.relplot(data=tips, x="total_bill", y="tip", hue="sex", row="time", col="day", height=3, aspect=1.5)


plt.savefig("../../charts/sns-rel-fig.png")
分布复合图 
import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 分布复合图:整合直方图hist/kde/ecdf,通过kind切换,默认hist
# 基于FacetGrid的多子图系统,支持col/row分面参数
sns.displot(data=tips, x="tip", col="day", row="time", height=3, aspect=1.5)

plt.savefig("../../charts/sns-dist-fig.png")
 
分类复合图
import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 分类复合图:整合strip、swarm、box、violin、boxen、point、bar、count图表,通过kind切换,默认strip
# 基于FacetGrid的多子图系统,支持col/row分面参数
sns.catplot(data=tips, x="day", y="tip", hue="sex", col="day", row="time", kind="bar", height=3, aspect=1.5)

plt.savefig("../../charts/sns-cat-fig.png")
 
 回归分析图
import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 线性回归图
# 基于FacetGrid的多子图系统,支持col/row分面参数
sns.lmplot(data=tips, x="total_bill", y="tip", col="day", row="time", height=3, aspect=1.5)

plt.savefig("../../charts/sns-lmplot.png")

 联合分布

import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 联合分布:展示‌两个变量的联合分布和边缘分布‌
sns.jointplot(data=tips, x="total_bill", y="tip", hue="time")

plt.savefig("../../charts/sns-jointplot.jpg")

  

 热力图

import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 热力图:高维数据关系
sns.heatmap(tips.corr(numeric_only=True))  # 显示两变量之间的相关性,颜色越浅,代表两者之间越具有相关性。

plt.savefig("../../charts/sns-heatmap.png")

成对关系图

import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 成对关系图:绘制数据集中‌所有数值变量两两之间的关系‌,对角线默认显示单变量分布
sns.pairplot(tips, hue="time")

plt.savefig("../../charts/sns-pairplot.png")

成对关系网格
自由定制所有变量两两关系的可视化组合
import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips", data_home="E:\code\learn\learn-python3\seaborn-data-master")

# 成对关系网格:自由定制所有变量两两关系的可视化组合
g = sns.PairGrid(tips, hue="time")
g.map_diag(sns.kdeplot, fill=True)  # 指定对角线上子图的绘图方法
# g.map_offdiag(sns.histplot)# 指定非对角线上子图的绘图方法
g.map_upper(plt.scatter)  # 指定上三角子图的绘图方法
g.map_lower(sns.regplot)  # 指定下三角子图的绘图方法

plt.savefig("../../charts/sns-pairgrid.png")

posted @ 2024-01-03 17:13  carol2014  阅读(107)  评论(0)    收藏  举报