第 5 章 数据的可视化分析
5.1 特殊统计图的绘制
5.1.1 数学函数图
5.1.2 气泡图
5.1.3 三维曲面图
5.1.4 三维散点图
5.2 Seaborn 统计绘图
5.2.1 基本概念
5.2.2 常用统计图
5.3 ggplot 绘图系统
5.3.1 qplot 快速制图
5.3.2 ggplot 基本绘图
(1)初等函数图
import matplotlib.pyplot as plt #加载基本绘图包
plt.rcParams['font.sans-serif']=['KaiTi']; #SimHei黑体
plt.rcParams['axes.unicode_minus']=False; #正常显示图中负号
import numpy as np #加载软件包numpy
import math #加载软件包math
x=np.linspace(0,2*math.pi);x #[0,2*pi]序列
plt.plot(x,np.sin(x)) #y=sinx
plt.plot(x,np.cos(x)) #y=cosx
plt.plot(x,np.log(x)) #y=lnx
plt.plot(x,np.exp(x)) #y=e^x
(2)极坐标图(加公式)
t=np.linspace(0,2*math.pi)
x=2*np.sin(t);
y=3*np.cos(t)
plt.plot(x,y);
plt.text(0,0,r'$\frac{x^2}{2}+\frac{y^2}{3}=1$',fontsize=20)
import pandas as pd
BSdata=pd.read_excel('DaPy_data.xlsx','BSdata');
plt.scatter(BSdata['身高'], BSdata['体重'], s=BSdata['支出']);
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.5)
Y = np.arange(-4, 4, 0.5)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X**2 + Y**2)
ax.plot_surface(X, Y, Z);
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(BSdata['身高'], BSdata['体重'], BSdata['支出'])
#先在系统上安装seaborn软件包
!pip install seaborn
import seaborn as sns #加载软件包seaborn
sns.boxplot(x=BSdata['身高'])
#竖着放的箱线图,也就是将 x 换成 y
sns.boxplot(y=BSdata['身高'])
# 分组绘制箱线图
sns.boxplot(x='性别', y='身高',data=BSdata)
sns.violinplot(x='开设', y='支出', hue='性别', data=BSdata)
sns.stripplot(x='性别', y='身高', data=BSdata, jitter=True)
sns.barplot(x='性别', y='身高', data=BSdata, ci=0, palette="Blues_d")
sns.countplot(x='性别', hue="开设", data=BSdata)
sns.factorplot(x='性别', col="开设", col_wrap=3, data=BSdata, kind="count", size=2.5, aspect=.8)
sns.distplot(BSdata['身高'], kde=True, bins=20, rug=True);
sns.jointplot(x='身高', y='体重', data=BSdata);
#针对多个变量
sns.pairplot(BSdata[['身高','体重','支出']]);
#在系统上安装plotnine包
!pip install plotnine
from plotnine import * #加载和调用ggplot所有方法
qplot(x='身高',data=BSdata, geom='histogram')+ theme_grey(base_family = 'KaiTi')
qplot('开设',data=BSdata, geom='bar')+ theme_grey(base_family = 'KaiTi')
qplot('身高', '体重', data=BSdata, color='性别') + theme_grey(base_family = 'KaiTi')
#绘制直角坐标系
GP=ggplot(aes(x='身高',y='体重'),data=BSdata)+ theme_grey(base_family = 'KaiTi');GP
#增加点图
GP + geom_point() + theme_grey(base_family = 'KaiTi')
#增加线图
GP + geom_line()+ theme_grey(base_family = 'KaiTi')
(1)直方图
ggplot(BSdata,aes(x='身高'))+ geom_histogram()+ theme_grey(base_family = 'KaiTi')
(2)散点图
ggplot(BSdata,aes(x='身高',y='体重')) + geom_point() + theme_grey(base_family = 'KaiTi')
#不同类型画不同记号(shape)/颜色(color)
ggplot(BSdata,aes(x='身高',y='体重',color='性别'))+geom_point()+ theme_grey(base_family = 'KaiTi')
(3)线图
ggplot(BSdata,aes(x='支出'))+geom_line(aes(y='身高')) + theme_grey(base_family = 'KaiTi')
#共用一个坐标,绘制不同的 y 值
ggplot(BSdata,aes(x='支出'))+geom_line(aes(y='身高')) +geom_line(aes(y='体重'))+ theme_grey(base_family = 'KaiTi')
(4)分面图
ggplot(BSdata,aes(x='身高',y='体重'))+geom_point()+facet_wrap('性别') + theme_grey(base_family = 'KaiTi')
ggplot(BSdata,aes(x='身高',y='体重',color='性别'))+geom_point()+theme_bw()+ theme_grey(base_family = 'KaiTi')