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() #将上面画的两个图都展现出来
时间序列图