有时间看下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")