python3之seaborn库

发布时间 2024-01-03 17:14:30作者: carol2014

有时间看下seaborn库,写一些demo记录下

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("../../files/gen/plot.jpg")
# plt.savefig("../../files/gen/plot.pdf", dpi=200, bbox_inches="tight")

 seaborn库将图大致分为三类:relational、distributions、categorical

relational

sns.relplot(x="total_bill", y="tip", data=tips, hue="sex", style="time")
plt.title("relplot", loc="center")

 

plt.subplot(2, 1,1)
sns.scatterplot(x="tip", y="total_bill", hue="sex", style="time", data=tips)
plt.title("scatter plot", loc="center")

plt.subplot(2, 1,2)
sns.lineplot(x="tip", y="total_bill", hue="sex", style="time", data=tips)
plt.title("line plot", loc="center")

 

 distributions 

sns.displot(tips["total_bill"])
plt.title("displot", loc="center")

  

# 直方图
plt.subplot(3, 1,1)
sns.histplot(tips["total_bill"])
plt.title("hist plot", loc="center")

plt.subplot(3, 1,2)
sns.rugplot(tips["total_bill"])
plt.title("rug plot", loc="center")

# 密度曲线图
plt.subplot(3, 1, 3)
sns.kdeplot(tips["total_bill"], fill=True)
plt.title("kde plot", loc="center")

 

 categorical

 # 分面网格分类图
sns.catplot(x="day", y="tip", hue="sex", col="time", row="smoker", kind="bar", data=tips)
plt.title("catplot", loc="center")

 

# 箱型图
plt.subplot(9, 1, 1)
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Box plot", loc="center")

plt.subplot(9, 1, 2)
sns.boxplot(x="day", y="total_bill", data=tips, hue="sex")
plt.title("Box plot with group", loc="center")

# voilin plot和box plot很相似,但它结合了box plot图和密度痕迹
plt.subplot(9, 1, 3)
sns.violinplot(x="day", y="total_bill", data=tips)
plt.title("voilin plot", loc="center")

plt.subplot(9, 1, 4)
sns.violinplot(x="day", y="total_bill", data=tips, hue="sex", split=True)
plt.title("voilin plot with group", loc="center")

# 扰动点图
plt.subplot(9, 1, 5)
sns.stripplot(x="day", y="total_bill", data=tips)
plt.title("strip plot", loc="center")

plt.subplot(9, 1, 6)
sns.stripplot(
    x="day", y="total_bill", data=tips, jitter=True, hue="sex", dodge=True
)
plt.title("strip plot with group", loc="center")

# Swarn plot和stripplot比较类似,但Swarn plot的不同之处在于它不会重叠数据点
plt.subplot(9, 1, 7)
sns.swarmplot(x="day", y="total_bill", data=tips)
plt.title("Swarn plot", loc="center")

plt.subplot(9, 1, 8)
sns.pointplot(x="day", y="total_bill", data=tips, estimator=np.mean)
plt.title("point plot", loc="center")

# 条形图
plt.subplot(9, 1, 9)
sns.barplot(x="day", y="total_bill", data=tips, estimator=np.mean)
plt.title("bar plot", loc="center")

 

 

# 联合分布
sns.jointplot(x="total_bill", y="tip", data=tips)

  

# 相关性图
sns.pairplot(tips)

 

# 成对关系网格子图
g = sns.PairGrid(tips)
# 指定对角线上子图的绘图方法
g.map_diag(sns.histplot)
# 指定非对角线上子图的绘图方法
# g.map_offdiag(sns.histplot)
# 指定上三角子图的绘图方法
g.map_upper(plt.scatter)
# 指定下三角子图的绘图方法
g.map_lower(sns.kdeplot)

 

# 多面网格子图
g = sns.FacetGrid(tips, col="day", row="time", hue="sex")
g.map(sns.histplot, "total_bill")

 

sns.lmplot(x="total_bill", y="tip", data=tips)
plt.title("lmplot", loc="center")

 

# 相关性热力图 热力图可用来显示两变量之间的相关性,颜色越浅,代表两者之间越具有相关性。
i += 1
plt.subplot(N, 1, i)
sns.heatmap(tips.corr(numeric_only=True))
plt.title("heat plot", loc="center")

# 计数
i += 1
plt.subplot(N, 1, i)
sns.countplot(x="day", data=tips)
plt.title("count plot", loc="center")