Seaborn是一个基于Matplotlib的图形可视化库。该库预先定义了一套自己的样式,也封装了一系列方便的绘图函数。之前需要大量代码通过matplotlib完成的画图,使用seaborn可能就是一行代码的事情。总结一句话:用seaborn画画,比matplotlib更漂亮、更简单。FacetGrid可以通过col、row等参数一次性构建多个图形。relplot、catplot、lmplot等函数可以通过col、row等在一个Figure中绘制多个图形,这个函数之所以有这些函数,是因为函数底层使用了FacetGrid来拼装这些图形。FacetGrid图的x和y参数必须是DataFrame列的名称。而直接使用Axes绘图,参数更灵活。普通Axes绘图其实Seaborn的绘图函数中有大量是直接使用Axes进行绘图的。如果在函数名中明确表示了图片的类型,那么这种图片就是使用Axes绘制的。比如sns.scatterplot,sns.lineplot,sns.barplot等。Axesplots可以直接使用之前matplotlib的一些方法来设置plot的元素。importseabornassnsimportmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnptips=pd.read_csv("dataset/tips.csv")#散点图绘制返回一个Axes对象axes=sns.scatterplot(x="total_bill",y="tip",data=tips)#使用Axes对象的函数设置一些属性axes.set_xticks(range(0,60,5))fig,[ax1,ax2]=plt.subplots(1,2,figsize=(20,5))#z画散点图#ax参数指定Axes对象sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax1)#画直方图sns.barplot(x="total_bill",y="tip",data=tips,ax=ax1)day",y="total_bill",data=tips,ax=ax2)#散点图参数可以是数组等形式的数据sns.scatterplot(x=tips['total_bill'],y='tip',data=tips)FacetGrid基本上是先创建一个FacetGrid对象,然后调用这个对象的map方法,其中map是第一个参数method是一个函数,后面的map会调用这个函数来绘制图形,下面的参数是par传递给这个函数的参数。第一个参数是一个可以绘制Axes图的函数,可以接受一个颜色参数。可以取的值如下:参数说明对应使用FacetGrid函数plt.plot/sns.lineplot绘制折线图sns.relplot(kind="line")plt.hexbin绘制六边形图sns.jointplot(kind="hex")plt.hist绘制直方图sns.distplotplt.scatter/sns.scatterplot绘制散点图sns.relplot(kind="scatter")sns.stripplot绘制分类散点图sns.catplot(kind="strip"sns.swarmplot画一个分散的分类散点图sns.catplot(kind="swarm")sns.boxplot画一个箱形图sns.catplot(kind="box")sns.violinplot画一个小提琴图sns.catplot(kind="violin")sns.pointplot绘制一个点线图sns.catplot(kind="point")sns.barplot绘制一个条形图sns.catplot(kind="bar")sns.countplot绘制一个quantityhistogramsns.catplot(kind="count")sns.regplot绘制带回归线的散点图sns.lmplotimportseabornassnsimportmatplotlib.pyplotaspltimportpandasaspdtips=pd.read_csv("dataset/tips.csv")#德拉w散点图g1=sns。FacetGrid(tips)g1.map(plt.scatter,"total_bill","tip")绘制多个图形FacetGrid可以通过col和row参数在一个Figure上绘制多个图形,其中col和row在数据集中是一定的名称的一列。只要指定这个名称,就会根据指定列中的值个数自动绘制指定数量的图形。#画多个图g2=sns.FacetGrid(tips,col="day",col_wrap=2)g2.map(plt.scatter,"total_bill","tip")添加颜色观察字段可以通过添加hue参数来控制每个图中元素的颜色是观察其他字段g2=sns.FacetGrid(tips,col="day",hue="time")g2.map(plt.scatter,"total_bill","tip")#addLegendg2.add_legend()设置每张图的大小使用FacetGrid绘制完图后,如果设置每张图的大小或者纵横比,可以在FacetGrid中设置高度和纵横比,其中高度代表每张图的大小graphic(默认同宽同高),aspect代表宽/高的比例。g3=sns.FacetGrid(tips,col="smoker",height=4,aspect=1.5)g3.map(sns.barplot,"day","total_bill")设置图例默认不添加图例,我们可以使用g.add_legend()添加图例。(1)使用title控制图例的标题(2)使用label_order控制图例元素的顺序sns.set(rc={"font.sans-serif":"SimHei"})g2=sns.FacetGrid(tips,col="day",hue="time")g2.map(plt.scatter,"total_bill","tip")#addlegendg2.add_legend(title="title",label_order=['午餐','Dinner'])new_labels=['lunch','dinner']fortext,labelinzip(g2._legend.texts,new_labels):text.set_text(label)设置标题标题可以通过以下方式设置:g。set_titles(template=None,row_template=None,col_template=None),这三个参数的含义如下:}:绘制每行图片的名称Value,{col_var}:绘制每列图片的名称,{col_name}:绘制每列图片的值col_template:设置图片的列标题,其中有{col_var}and{col_name}row_template:为图片设置行标题,其中有{row_var}和{row_name}can被使用g=sns.FacetGrid(tips,col="day",row="time")g.map(sns.regplot,"total_bill","tip")#设置标题到行#g.set_titles(template="{row_var}/{row_name}")#设置列的标题g.set_titles(template="{col_var}/{col_name}title")设置坐标轴g.set_axis_labels(x_var,y_var):set一次x和y坐标的标题g.set_xlabels(label):设置x轴的标题g.set_ylabels(label):设置y轴的标题g.set(xticks,yticks):设置x轴和y轴的刻度g.set_xticklables(labels):设置x轴的刻度文本g.set_yticklabels(labels):设置y轴的刻度文本g=sns.FacetGrid(tips,col="day",row="time")g.map(sns.scatterplot,"total_bill","tip")#一次性设置x和y坐标的标题g.set_axis_labels('consumptionamount','tip')g.set(facecolor='y')#设置x轴的刻度和刻度文字g.set(xticks=range(0,50,5),xticklabels=["$%d"%xforxinrange(0,50,5)])g.set方法g.set方法可以为FacetGrid下的每个子图Axes设置属性。可以设置的参数完全基于Axes的属性。比如可以设置每个Axes的facecolor等,具体可以参考matplotlib官方文档。Axesg.set(facecolor='y')#设置x轴g的刻度和刻度文字.set(xticks=range(0,50,5),xticklabels=["$%d"%xforxinrange(0,50,5)])g.fig方法可以通过g获取当前Figure对象.fig,然后通过Figure对象设置其他属性,比如dip等。g=sns.FacetGrid(tips,col="day",row="time")g.map(sns.scatterplot,"total_bill","tip")#设置分辨率g.fig.set_dpi(100)
