更多优质内容
请关注公众号

Python数据分析基础(九) 使用Seaborn绘制图像-张柏沛IT博客

正文内容

Python数据分析基础(九) 使用Seaborn绘制图像

栏目:Python 系列:Python数据分析系列 发布时间:2019-12-16 14:25 浏览量:4588

Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。可以使得数据可视化更加的方便,美观。关于Seaborn的学习,推荐去官网,里边有详细的教程和示例。

所以说seabon是用来配合matplotlib使用的。

 

下面直接举例:

#鸢尾花数据  flower.py
from sklearn.datasets import load_iris
import numpy as np
from pandas import DataFrame as df

def getData():
    iris = load_iris()
    # print(iris)
    # print(iris.data)  #150行的数据
    # print(iris.data.shape)

    #转为df
    df1 = df(iris.data,columns=["sepalLength","sepalWidth","petalLength","petalWidth"])  #iris.data的行会作为df1的行
    df1['target'] = iris.target  #鸢尾花分类

    return df1

if __name__ == "__main__":
    print(getData().head())
    
#    sepalLength  sepalWidth  petalLength  petalWidth  target
# 0          5.1         3.5          1.4         0.2       0
# 1          4.9         3.0          1.4         0.2       0
# 2          4.7         3.2          1.3         0.2       0
# 3          4.6         3.1          1.5         0.2       0
# 4          5.0         3.6          1.4         0.2       0

这里使用sklearn库中的数据,之后的每一个例子都会获取getData()中的数据

 

直方图和密度函数

from flower import getData
import numpy as np
import pandas as pd
from scipy import stats,integrate
import seaborn as sns
import matplotlib.pyplot as plt

df1 = getData()
sns.set(color_codes=True)

#distplot默认画出数据的直方图和核密度估计
sns.distplot(df1['petalLength'],bins=15)

plt.show()

 

直方图和密度函数

 

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#散点图+直方图
sns.jointplot(x="sepalLength",y="sepalWidth",data=df1,size=8)

plt.show()

散点图+直方图

 

散点图

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#散点图,FacetGrid作用是标记不同的种类,map(plt.scatter)表示使用散点图,add_legend()是添加标示
sns.FacetGrid(df1,hue="target",height=8).map(plt.scatter,"sepalLength","sepalWidth").add_legend()
plt.show()

散点图

 

核密度估计图

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#二维核密度估计图,核密度估计是概率论中用来估计未知的密度,属于非参数检验方法之一
g = sns.jointplot(x="sepalLength",y="petalLength",data=df1,kind="kde",color="m")

# 在同一个坐标轴添加散点图,散点以+标记
g.plot_joint(plt.scatter,c="w",s=30,linewidth=1,marker="+")
# g.ax_joint.collections[0].set_alpha(0)
plt.show()

核密度估计图

 

矩阵散点图
用于考察多个变量间的相关关系时,会使用矩阵散点图来同时绘制各个变量间的散点图
下面使用PairGrid()和pairplot()绘制成对的关系图,配合map(plt.scatter)绘制散点图

pairplot()和PairGrid()的作用是在一个画布上绘制多个子图

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#矩阵散点图
g = sns.PairGrid(df1)
g.map(plt.scatter)

plt.show()

矩阵散点图

 

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

# g = sns.PairGrid(df1)
g = sns.PairGrid(df1,hue="target")  #加了hue="分类列名",表示使用不同的颜色显示分类
#在对角线上绘制不同的函数以显示df每列中该变量自己的分布
g.map_diag(plt.hist)   #意思是,对角线子图显示直方图
g.map_offdiag(plt.scatter)  #非对角线的地方显示散点图

g.add_legend()  #添加图例
plt.show()

分类显示矩阵散点图

 

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#如果我只想看个别几个变量之间的相关关系,可以这样
g = sns.PairGrid(df1,vars=['sepalLength','sepalWidth','petalLength'],hue="target")
g.map(plt.scatter)

plt.show()

特定变量间的矩阵散点图

 

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#如果想在上下两个三角形显示不同类型的图,比如右上角显示散点图,左下角显示二维核密度估计图,对角线显示密度函数
g=sns.PairGrid(df1)   #画核密度估计图不能加hue="分类"
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot,cmap="Blues_d")
g.map_diag(sns.kdeplot,lw=3,legend=False)

plt.show()

 

 

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#使用pairplot快速查看一个数据集的图,默认是对角线直方图,非对角线散点图
# g=sns.pairplot(df1,height=2.5)    #height是原size参数,表示图的大小
g=sns.pairplot(df1,palette="Set2",height=2.5,diag_kind="kde")
plt.show()

 

线性相关图

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()

#绘制线性相关
sns.lmplot(x="sepalLength",y="petalLength",data=df1)    #如果不加hue分类的话,那么显示的就是sepalLength和petalLength总体的线性关系
sns.lmplot(x="sepalLength",y="petalLength",hue="target",data=df1)   #如果加了hue分类,会显示每个分类各自的sepalLength和petalLength总体的线性关系,会有3条线
plt.show()

线性相关图

 

分类数据可视化
盒形图(箱线图)和小提琴图

小提琴图是箱线图和核密度图的结合,箱线图展示了分位数的位置,小提琴图则是显示了任意位置的密度,可以知道哪些位置的密度较高

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = getData()


sns.violinplot(x="target",y="sepalLength",data=df1,inner=None)   #小提琴图分类数据可视化的话一般将x设成分类
sns.swarmplot(x="target",y="sepalLength",data=df1,alpha=.5,color="w")   #散点图

#两个图会叠加在一起
plt.show()

小提琴图

 

 

 

pandas中的可视化功能

 

1.绘制箱线图
df.boxplot()

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams['font.sans-serif']=['SimHei']

df1 = getData()

df1.boxplot(by="target",figsize=(12,6))
plt.show()

Pandas中的箱线图

 

 

2.时间序列图

from flower import getData
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# import seaborn as sns

# plt.rcParams['font.sans-serif']=['SimHei']

#绘制折线图(时间序列图)

#生成1000个数据,index为日期,值为符合正态分布的1000个随机数
ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000',periods=1000))
print(ts)

ts=ts.cumsum() #累加
print(ts)
ts.plot()   #绘制折线图


#绘制多条折线图
df1 = pd.DataFrame(np.random.randn(1000,4),index=ts.index,columns=list("ABCD"))
df1 = df1.cumsum()
print(df1.head())

df1.plot()

plt.show()   #将上面画的两个图都展现出来

时间序列图

 

 




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Python数据分析基础(九) 使用Seaborn绘制图像

热门推荐
推荐新闻