一. seaborn.factorplot 语法
语法:
seaborn.factorplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='point', size=4, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)
参数解释:
- x,y,hue 数据集变量 变量名
- data 数据集 数据集名
- row,col 更多分类变量进行平铺显示 变量名
- col_wrap 每行的最高平铺数 整数
- estimator 在每个分类中进行矢量到标量的映射 矢量
- ci 置信区间 浮点数或None
- n_boot 计算置信区间时使用的引导迭代次数 整数
- units 采样单元的标识符,用于执行多级引导和重复测量设计 数据变量或向量数据
- order, hue_order 对应排序列表 字符串列表
- row_order, col_order 对应排序列表 字符串列表
- kind : 可选:point 默认, bar 柱形图, count 频次, box 箱体, violin 提琴, strip 散点,swarm 分散点 size 每个面的高度(英寸) 标量 aspect 纵横比 标量 orient 方向 "v"/"h" color 颜色 matplotlib颜色 palette 调色板 seaborn颜色色板或字典 legend hue的信息面板 True/False legend_out 是否扩展图形,并将信息框绘制在中心右边 True/False share{x,y} 共享轴线 True/False
二. 数据集介绍
数据集下载:
https://github.com/mwaskom/seaborn-data
2.1 tips数据集
也可以通过 tips = sns.load_dataset("tips") 直接读取
数据集介绍
total_bill:总金额
tip:小费
sex: 性别
smoker:是否允许吸烟
day: 周几
time: 午餐 晚餐
size: 几个
2.2 titanic_train.csv
泰坦尼克号的数据集
image.png
2.3 irr.csv
鸢尾花数据集:
- 数据集包含150个样本(数据集的行)
- 数据集包含4个属性(数据集的列):Sepal Length,Sepal Width,Petal Length,Petal Width:‘feature_names’
- 利用numpy.ndarray存储这150x4的数据:‘data’
分类标签取自array[‘Setosa’,‘Versicolour’,‘Virginica’]:‘target_names’
Setosa,Versicolour,Virginica是数据集所包含的3中品种的鸢尾花
这3个分类标签(即150x1数据)用np.ndarray存储:‘target’
总之,这个数据存储了150x4的特征数据和150x1的分类标签,其中特征数据又放在‘data’里,分类标签放在‘target’里
三. 实例
3.1 散点图
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
# 有重叠,影响我们看数据
sns.stripplot(x="day", y="total_bill", data=tips);
# 消除重叠,放在旁边
# sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
# 消除重叠,以树形放置
# sns.swarmplot(x="day", y="total_bill", data=tips)
# 加上hue,多增加一个分类变量
# sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips)
# x y 变换位置
# sns.swarmplot(x="total_bill", y="day", hue="time", data=tips);
plt.show()
测试记录:
-
有重叠,影响我们看数据
image.png -
消除重叠,放在旁边
image.png -
消除重叠,以树形放置
image.png -
加上hue,多增加一个分类变量
image.png -
x y 变换位置
image.png
3.2 盒图
IQR即统计学概念四分位距,第一/四分位与第三/四分位之间的距离
N = 1.5IQR 如果一个值>Q3+N或 < Q1-N,则为离群点
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
# 图1
sns.boxplot(x="day", y="total_bill", hue="time", data=tips);
# 图2
#sns.violinplot(x="total_bill", y="day", hue="time", data=tips);
# 图3
#sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True);
# 图4
#sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
#sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)
# 图5
#sns.barplot(x="sex", y="survived", hue="class", data=titanic);
plt.show()
测试记录:
图1:
图2:
image.png
图3:
image.png
图4:
image.png
图5:
image.png
3.3 点图可以更好的描述变化差异
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
# 图1
sns.pointplot(x="sex", y="survived", hue="class", data=titanic);
# 图2
#sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
# palette={"male": "g", "female": "m"},
# markers=["^", "o"], linestyles=["-", "--"]);
plt.show()
测试记录:
图1:
图2:
image.png
3.4 宽形数据
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
sns.boxplot(data=iris,orient="h");
plt.show()
测试记录:
3.5 多层面板分类图
3.5.1 例1
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
sns.catplot(x="day", y="total_bill", hue="smoker", data=tips)
plt.show()
测试记录:
3.5.2 例2
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
sns.catplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar")
plt.show()
测试记录:
3.5.3 例3
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
sns.catplot(x="day", y="total_bill", hue="smoker",
col="time", data=tips, kind="swarm")
plt.show()
测试记录:
3.5.4 例4
代码:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画板样式
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
# 读取数据集
titanic = pd.read_csv('E:/file/titanic.csv')
tips = pd.read_csv('E:/file/tips.csv')
iris = pd.read_csv('E:/file/iris.csv')
sns.catplot(x="time", y="total_bill", hue="smoker",
col="day", data=tips, kind="box", height=4, aspect=.5)
plt.show()
测试记录:
网友评论