
今天主要介绍上一期scatter、bar、hist在seaborn中的作图方法,读者可以与之前的matplotlib给出的方法进行对比。另外介绍一部分heatmap的做法。
模块seaborn提供多个已经封装好的作图函数,十分方便。使用seaborn主要依靠已经构建好的数据结构,我用的比较多的是pandas的dataframe。seaborn定义的多个函数用到的参数有几个是固定通用的。
下面先介绍scatterplot,后面的bar、hist有很多参数与之类似。
scatterplot
散点图常用参数:seaborn.scatterplot(*, x=None, y=None, hue=None, style=None, palette=None, size=None, data=None, ax=ax)x,y分别定义横轴、纵轴对应的值在data指定的情况下,直接指定x、y的列名即可hue按照某种属性划分颜色区分style按照某种属性设置不同形状markersize设定marker的大小data为dataframepalette设置调色板一般可以设置为muted、Set2等这里用seaborn推荐的tips数据来进行展示,共计244行7列。数据集来自于上世纪90年代某餐厅服务员记录的小费收入情况。在餐馆吃饭时给的小费tip受到消费总和(total_bill)、性别(sex)、周几(day)、聚会人数(size)等因素影响。如下:tips = sns.load_dataset("tips")tipsOut[66]: total_bill tip sex smoker day time size0 16.99 1.01 Female No Sun Dinner 21 10.34 1.66 Male No Sun Dinner 32 21.01 3.50 Male No Sun Dinner 33 23.68 3.31 Male No Sun Dinner 24 24.59 3.61 Female No Sun Dinner 4.. ... ... ... ... ... ... ...239 29.03 5.92 Male No Sat Dinner 3240 27.18 2.00 Female Yes Sat Dinner 2241 22.67 2.00 Male Yes Sat Dinner 2242 17.82 1.75 Male No Sat Dinner 2243 18.78 3.00 Female No Thur Dinner 2fig,ax=plt.subplots(figsize=(5,5))sns.scatterplot(x="total_bill",y="tip",palette="Set2",hue="sex",style="smoker",data=tips,ax=ax)#按照sex划分颜色,smoker划分形状,可能难以辨认,一般我使用较多的是hue
barplot
seaborn.barplot(*, x=None, y=None, hue=None, data=None, order=None, hue_order=None, palette=None, ax)fig,ax=plt.subplots(figsize=(5,5))sns.barplot(x="day", y="tip", hue="sex", data=tips,palette="Set2",ax=ax)
histplot
seaborn.histplot(data=None, *, x=None, y=None, hue=None, weights=None, stat='count', bins='auto', binwidth=None,ax)fig,ax=plt.subplots(figsize=(5,5))sns.histplot(data=tips,x="tip", hue="time",bins=15,palette="muted",alpha=0.6,ax=ax) 
heatmap
matplotlib有多种方法作出heatmap,官方给出的是pcolormesh:
matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None, cmap=None, vmin=None, vmax=None, shading=None, antialiased=False, data=None, **kwargs)最主要的是三个参数
pcolormesh([X, Y,] C, **kwargs)X Y定义位置:(X[i+1, j], Y[i+1, j]) (X[i+1, j+1], Y[i+1, j+1]) +-----+ | | +-----+ (X[i, j], Y[i, j]) (X[i, j+1], Y[i, j+1])C定义value。这三个参数都可以为array类型,不需要一一定义。如下面的例子:Z = np.random.rand(5, 5)#随机产生5行5列的numpy.ndarrayx = np.arange(-0.5, 5, 1) # len = 6y = np.arange(-0.5, 5, 1) # len = 6fig, ax = plt.subplots(figsize=(5,5))cqm=ax.pcolormesh(x, y, Z,cmap="Purples") #colormap选择Purplesfig.colorbar(cqm)#添加上colorbar
使用axes的imshow也可以得到对应完全相同的图形:
imshow直接将数据展示成图像Display data as an image, i.e., on a 2D regular raster.fig, ax = plt.subplots(figsize=(5,5))ima=ax.imshow(Z,cmap="Purples",aspect="auto",origin="lower")#aspect设置为auto,默认equal下为cell为正方形;origin指定原点的位置,默认在左上角fig.colorbar(ima,ax=ax8)
另外在做heatmap的时候,可能需要加上注释信息,这里可以使用text来进行注释:
fig, ax = plt.subplots(figsize=(5,5))ima=ax.imshow(Z,cmap="Purples",aspect="auto",origin="lower")for i in range(Z.shape[0]):for j in range(Z.shape[1]): annot_text="%.2f"%Z[i, j]#修改注释的字符为两位精度的小数 text = ax.text(j, i, annot_text, ha="center", va="center", color="k")#定义注释字符在cell中的位置以及颜色,详细可参见text用法fig.colorbar(ima,ax=ax)
如果想要注释其他信息,例如符号,也可以在for循环中添加判定语句,添加自己想要注释的元素。
下面介绍seaborn中比较方便的heatmap的做法
seaborn.heatmap(data, *, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None, **kwargs)import pandas as pddf_z=pd.DataFrame(Z)fig, ax = plt.subplots(figsize=(5,5))sns.heatmap(df_z[::-1],fmt='.2f',annot=df_z,cmap="Purples",ax=ax)#这里的annot=df_z改为annot=True也可以,结果一样,这样写的目的是读者可以自制一个注释的矩阵,直接赋值到annot,可以很方便地注释
结尾:
今天的介绍就到这里,希望大家持续关注我们,下期再见 :)
往期回顾:
python作图学习(2)
Python作图学习(1)
Python也可以画boxplot


版权声明:本文为weixin_40008135原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。