Python数据可视化库seaborn ------ 两维数据间的分布关系;多维数据间的分布关系; 绘制回归关系;用DataFrame数据画图;根据某属性的不同类别绘制曲线;
观测两个变量之间的分布关系 ------ 最好用散点图
两个便量间的分布关系:
1 # 生成一个多维正态分布的随机数,分别传入参数均值和协方差矩阵
2 mean, cov = [0, 1], [(1, .5), (.5, 1)]
3 data = np.random.multivariate_normal(mean, cov, 200)
4 df = pd.DataFrame(data, columns=["x", "y"])
5 sns.jointplot(x="x", y="y", data=df)
6 # 在图中添加回归线
7 sns.jointplot(x="x", y="y", data=df, kind="reg")
8 plt.show()
运行结果:
用 “类蜂窝” 结构展示数据的分布:
1 x, y = np.random.multivariate_normal(mean, cov, 1000).T
2 with sns.axes_style("white"):
3 sns.jointplot(x=x, y=y, kind="hex", color="k")
4 plt.show()
运行结果:
多维数据间的分布关系
1 iris = sns.load_dataset("iris")
2 sns.pairplot(iris)
3 plt.show()
运行结果:
绘制回归关系
regplot()和lmplot()都可以绘制回归关系,推荐regplot()
1 tips = sns.load_dataset("tips")
2 print(tips.head())
3 sns.regplot(x="total_bill", y="tip", data=tips)
4 sns.lmplot(x="total_bill", y="tip", data=tips)
5 plt.show()
运行结果:
用DataFrame数据画图
用 "dataset == 'I' " 的数据画图;用"dataset == 'II' " 的数据画图
1 anscombe = sns.load_dataset("anscombe")
2 print(anscombe.head())
3 print(type(anscombe))
4 # ci 置信区间 query 查询布尔表达式所在的数据; scatter_kws={"s": 80}设置点的大小
5 sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
6 ci=None, scatter_kws={"s": 80})
7 # order=2 表示用二次多项式拟合
8 sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
9 ci=None, order=2, scatter_kws={"s": 40})
10 plt.show()
运行结果:
根据某属性的不同类别绘制曲线
根据一个属性按类别绘制图像
1 tips = sns.load_dataset("tips")
2 sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)
3 # hue 列名分割
4 sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,
5 markers=["o", "*"], palette="Set1")
6 plt.show()
运行结果:
按两个属性的类别绘制,
这里 hue 参数指定分类单调属性;col="time" 指定绘制图的时候将time的类别绘制在一行,如time有两个类别,
就绘制两列,如果加一个参数row,那么row指定的属性有几个类别就会绘制几行。
1 sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)
2 plt.show()
1 sns.lmplot(x="total_bill", y="tip", hue="smoker",
2 col="time", row="sex", data=tips)
3 plt.show()
运行结果:
ax参数会改变坐标的缩放;如果指定的col参数对应的属性有4个类别,那么画出来就是1行4列,这样不太美观,
我们可以用col_wrap=2 设定为2行。aspect=.5 你也可以使用这个参数设置长宽比。size参数已经停用,请使用
height表示“size”。
1 f, ax = plt.subplots(figsize=(5, 5)) 2 sns.regplot(x="total_bill", y="tip", data=tips, ax=ax) 3 plt.show() 4 sns.regplot(x="total_bill", y="tip", data=tips) 5 plt.show() 6 sns.lmplot(x="total_bill", y="tip", col="day", 7 data=tips, col_wrap=2, height=4)
8 plt.show()
运行结果:
清澈的爱,只为中国