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")

浙公网安备 33010602011771号