用 Seaborn 绘制统计型数据可视图
Seaborn 是基于 matplotlib 开发的高阶Python 数据可视图库,用于绘制优雅、美观的统计图形。
使用下列别名导入该库(一般取别名为sns):
import matplotlib.pyplot as plt
import seaborn as sns
使用 Seaborn 创建图形的基本步骤:
1.准备数据
2.设定画布外观
3.使用 Seaborn 绘图
4.自定义图形
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips") # 第一步
sns.set_style("whitegrid") # 第二步
g = sns.lmplot(x="tip", # 第三步
y="total_bill",
data=tips,
aspect=2)
g = (g.set_axis_labels("Tip","Total bill(USD)").set(xlim=(0,10),ylim=(0,100))) # 第4步
plt.title("title")
plt.show(g)
报错:urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
原因:seaborn-data文件里面是空的
上方代码报错解决办法:
1.去https://github.com/mwaskom/seaborn-data下载seaborn-data文件
2.解压后打开文件并复制
3.在电脑中搜索seaborn-data原文件(发现文件夹是空的)
4.将第二步复制的文件粘贴到步骤3的原文件中
1 数据
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 = sns.load_dataset("titanic")
iris = sns.load_dataset("iris")
2 画布外观
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})
sns.axes_style("whitegrid") # 返回参数字典或用with设置临时样式
上下文函数
sns.set_context("talk") # 将上下文设置为 "talk"
sns.set_context("notebook", # 将上下文设置为 "notebook", 缩放字体,覆盖参数映射
font_scale=1.5,
rc={"lines.linewidth":2.5})
调色板
sns.set_palette("husl",3) # 定义调色板
sns.color_palette("husl") # 使用 with 临时设置调色板
flatui = ["#9b59b6","#3498db","#95a5a6","#e74c3c","#34495e","#2ecc71"]
sns.set_palette(flatui) # 设置调色板
3 使用 Seaborn 绘图
坐标轴栅格
g = sns.FacetGrid(titanic,
col="survived",
row="sex") # 绘制条件关系的子图栅格
g = g.map(plt.hist,"age")
sns.factorplot(x="pclass",
y="survived",
hue="sex",
data=titanic) # 在分面栅格上绘制分类图
sns.lmplot(x="sepal_width",
y="sepal_length",
hue="species",
data=iris) # 绘制适配分面栅格的数据与回归模型
h = sns.PairGrid(iris) # 绘制配对关系的子图栅格
h = h.map(plt.scatter) # 绘制配对的双变量分布
sns.pairplot(iris) # 绘制双变量图的边际单变量图栅格
# i = sns.JointGrid(x="x",
# y="y",
# data=data)
# i = i.plot(sns.regplot,
# sns.distplot)
sns.jointplot("sepal_length",
"sepal_width", # #输入两个绘图变量
data=iris,
color='#098154',#修改颜色
height=5, #中部图高度(中部图为正方形)
ratio=2,#中部图与边际图尺寸比
marker='^',#修改散点marker
# marginal_kws=dict(bins=15, #hist箱子个数
# kde=True,#开启核密度图
# color='#c72e29',#直方图hist填充色
# ), # 修改边际图
kind='kde', # scatter(默认),可选reg,resid,kde,hex
) # 绘制双变量分布
各类图形
1 散点图
sns.stripplot(x="species",
y="petal_length",
data=iris) # 含分类变量的散点图
sns.swarmplot(x="species",
y="petal_length",
data=iris) # 不重叠分类散点图
2 条形图
sns.barplot(x="sex",
y="survived",
hue="class",
data=titanic)
3 计数图
sns.countplot(x="deck",
data=titanic,
palette="Greens_d")
4 点图
sns.pointplot(x="class",
y="survived",
hue="sex",
data=titanic,
palette={"male":"g",
"female":"m"},
markers=["^","o"],
linestyles=["-","--"])
5 箱型图
sns.boxplot(x="alive",
y="age",
hue="adult_male",
data=titanic) # 箱形图
sns.boxplot(data=iris,orient="h") # 使用宽表数据的箱型图
6 小提琴图
sns.violinplot(x="age",
y="sex",
hue="survived",
data=titanic)
7 回归图
sns.regplot(x="sepal_width",
y="sepal_length",
data=iris,
ax=ax) # 绘制与线性回归模型拟合的数据
f
8 分布图
plot = sns.distplot(data.y,
kde=False,
color="b") # 绘制单变量分布
9 矩阵图
sns.heatmap(uniform_data,vmin=0,vmax=1) # 热力图
深度自定义
Axisgrid 对象
g.despine(left=True) # 移除左框
g.set_ylabels("Survived") # 设置Y轴的标签
g.set_xticklabels(rotation=45) # 设置X轴刻度标签
g.set_axis_labels("Survived",
"Sex") # 设置坐标轴标签
h.set(xlim=(0,5),
ylim=(0,5),
xticks=[0,2.5,5],
yticks=[0,2.5,5]) # 设置X与Y轴的限制和刻度
图形
plt.title("A Title") # 添加图形标题
plt.ylabel("Survived") # 调整y轴标签
plt.xlabel("Sex") # 调整x轴标签
plt.ylim(0,100) # 调整y轴限制
plt.xlim(0,10) # 调整x轴限制
plt.setp(ax,yticks=[0,5]) # 调整图形属性
plt.tight_layout() # 调整子图参数
显示或保存图形
plt.show() # 显示图形
plt.savefig("foo.png") # 将画布保存为图形
plt.savefig("foo.png",
transparent=True) # 保存透明画布
关闭与清除
plt.cla() # 清除坐标轴
>>> plt.clf() # 清除画布
>>> plt.close() # 关闭窗口