Seaborn#
导入工具库#
用Seaborn绘制统计型数据可视图
Seaborn是基于matplotlib开发的高阶Python数据可视图库,用于绘制优雅、美观的统计图形。
使用下列别名导入该库:
import warnings
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
warnings.filterwarnings('ignore')
使用 Seaborn 创建图形的基本步骤:
Step 1 准备数据
Step 2 设定画布外观
Step 3 使用 Seaborn 绘图
Step 4 自定义图形
Step 5 展示结果图
tips = pd.read_csv("../_static/dataset/tips.csv")
# tips = sns.load_dataset("tips") # Step 1
sns.set_style("whitegrid") # Step 2
g = sns.lmplot(x="tip", y="total_bill", data=tips, aspect=2) # Step 3
g = g.set_axis_labels("Tip", "Total bill(USD)").set(xlim=(0, 10), ylim=(0, 100))
plt.title("title") # Step 4
plt.show(g) # Step 5

数据准备#
可以是numpy数组和Dataframe等数据格式
import pandas as pd
import numpy as np
uniform_data = np.random.rand(10, 12)
data = pd.DataFrame({"x": np.arange(1, 101), "y": np.random.normal(0, 4, 100)})
Seaborn 提供了内置数据集:
titanic = pd.read_csv("../_static/dataset/titanic.csv")
iris = pd.read_csv("../_static/dataset/iris.csv")
画布外观#
f, ax = plt.subplots(figsize=(5, 6)) # 创建画布与子图

Seaborn 样式#
sns.set() # 设置或重置 Seaborn 默认值
sns.set_style("whitegrid") # 设置 matplotlib 参数
sns.set_style("ticks", {"xtick.major.size": 8, "ytick.major.size": 8}) # 设置 matplotlib 参数
sns.axes_style("whitegrid") # 返回参数字典或用 with 设置临时样式
{'figure.facecolor': 'white',
'axes.labelcolor': '.15',
'xtick.direction': 'out',
'ytick.direction': 'out',
'xtick.color': '.15',
'ytick.color': '.15',
'axes.axisbelow': True,
'grid.linestyle': '-',
'text.color': '.15',
'font.family': ['sans-serif'],
'font.sans-serif': ['Arial',
'DejaVu Sans',
'Liberation Sans',
'Bitstream Vera Sans',
'sans-serif'],
'lines.solid_capstyle': 'round',
'patch.edgecolor': 'w',
'patch.force_edgecolor': True,
'image.cmap': 'rocket',
'xtick.top': False,
'ytick.right': False,
'axes.grid': True,
'axes.facecolor': 'white',
'axes.edgecolor': '.8',
'grid.color': '.8',
'axes.spines.left': True,
'axes.spines.bottom': True,
'axes.spines.right': True,
'axes.spines.top': True,
'xtick.bottom': False,
'ytick.left': False}
上下文函数#
sns.set_context("talk") # 将上下文设置为 "talk"
sns.set_context(
"notebook", font_scale=1.5, rc={"lines.linewidth": 2.5}
) # 上下文设为 "notebook",缩放字体,覆盖参数映射
调色板#
sns.set_palette("husl", 3) # 定义调色板
sns.color_palette("husl") # 使用 with 临时设置调色板
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
sns.set_palette(flatui) # 设置调色板
使用Seaborn绘图#
坐标轴栅格#
g = sns.FacetGrid(titanic, col="survived", row="sex") # 绘制条件关系的子图栅格
g = g.map(plt.hist, "age")

sns.catplot(x="pclass", y="survived", hue="sex", data=titanic) # 在分面栅格上绘制分类图
<seaborn.axisgrid.FacetGrid at 0x7f60549319d0>

sns.lmplot(
x="sepal_width", y="sepal_length", hue="species", data=iris
) # 绘制适配分面栅格的数据与回归模型
<seaborn.axisgrid.FacetGrid at 0x7f6050e4b470>

h = sns.PairGrid(iris) # 绘制配对关系的子图栅格
h = h.map(plt.scatter) # 绘制配对的双变量分布

sns.pairplot(iris) # 绘制双变量图的边际单变量图栅格
<seaborn.axisgrid.PairGrid at 0x7f606304f170>

i = sns.JointGrid(x="x", y="y", data=data)
i = i.plot(sns.regplot, sns.jointplot)



各类图形#
散点图
sns.stripplot(x="species", y="petal_length", data=iris) # 含分类变量的抖动图
<Axes: xlabel='species', ylabel='petal_length'>

sns.swarmplot(x="species", y="petal_length", data=iris) # 不重叠分类蜂群图
<Axes: xlabel='species', ylabel='petal_length'>

条形图
sns.barplot(x="sex", y="survived", hue="class", data=titanic) # 用散点图示符显示点估计值和置信区间
<Axes: xlabel='sex', ylabel='survived'>

计数图
sns.countplot(x="deck", data=titanic, palette="Greens_d") # 显示观测数量
<Axes: xlabel='deck', ylabel='count'>

点图
sns.pointplot(
x="class",
y="survived",
hue="sex",
data=titanic,
palette={"male": "g", "female": "m"},
markers=["^", "o"],
linestyles=["-", "--"],
) # 显示点估计和置信区间
<Axes: xlabel='class', ylabel='survived'>

箱形图
sns.boxplot(x="alive", y="age", hue="adult_male", data=titanic) # 箱形图
<Axes: xlabel='alive', ylabel='age'>

sns.boxplot(data=iris, orient="h") # 使用宽表数据的箱形图
<Axes: >

小提琴图
sns.violinplot(x="age", y="sex", hue="survived", data=titanic) # 小提琴图
<Axes: xlabel='age', ylabel='sex'>

回归图#
sns.regplot(x="sepal_width", y="sepal_length", data=iris, ax=ax) # 绘制与线性回归模型拟合的数据
<Axes: xlabel='sepal_width', ylabel='sepal_length'>
分布图#
plot = sns.distplot(data.y, kde=False, color="b") # 绘制单变量分布

矩阵图#
sns.heatmap(uniform_data, vmin=0, vmax=1) # 热力图
<Axes: >

深度自定义#
Axisgrid对象#
g.despine(left=True) # 移除左框
<seaborn.axisgrid.FacetGrid at 0x7f6094ca8380>
g.set_ylabels("Survived") # 设置 Y 轴标签
<seaborn.axisgrid.FacetGrid at 0x7f6094ca8380>
g.set_xticklabels(rotation=45) # 设置 X 轴刻度标签
<seaborn.axisgrid.FacetGrid at 0x7f6094ca8380>
g.set_axis_labels("Survived", "Sex") # 设置坐标轴标签
<seaborn.axisgrid.FacetGrid at 0x7f6094ca8380>
h.set(
xlim=(0, 5), ylim=(0, 5), xticks=[0, 2.5, 5], yticks=[0, 2.5, 5]
) # 设置 X 与 Y 轴的幅度区间和刻度
<seaborn.axisgrid.PairGrid at 0x7f6050e6c350>
图形#
plt.title("A Title") # 添加图形标题
Text(0.5, 1.0, 'A Title')

plt.ylabel("Survived") # 调整 Y 轴标签
Text(0, 0.5, 'Survived')

plt.xlabel("Sex") # 调整 X 轴标签
Text(0.5, 0, 'Sex')

plt.ylim(0, 100) # 调整 Y 轴幅度区间
(0.0, 100.0)

plt.xlim(0, 10) # 调整 X 轴幅度区间
(0.0, 10.0)

plt.setp(ax, yticks=[0, 5]) # 调整图形属性
[<matplotlib.axis.YTick at 0x7f605128e180>,
<matplotlib.axis.YTick at 0x7f6051226e40>]
plt.tight_layout() # 调整子图参数
<Figure size 640x480 with 0 Axes>
显示或保存图形#
show与savefig函数
plt.show() # 显示图形
plt.savefig("../_tmp/plt_savefig.png") # 将画布保存为图形
<Figure size 640x480 with 0 Axes>
plt.savefig("../_tmp/plt_savefig_transparent.png", transparent=True) # 保存透明画布
<Figure size 640x480 with 0 Axes>
关闭与清除#
绘图关闭与清除操作
plt.cla() # 清除坐标轴

plt.clf() # 清除画布
<Figure size 640x480 with 0 Axes>
plt.close() # 关闭窗口