plt python 自己制定cmap_python作图学习(3)

1a47dbbc2da8e2e76ce41ecc8121a92f.png

    今天主要介绍上一期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

ba2febdb7184cf9f7d5a1e0a335e312d.png

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)

937cf4411a3284b7f068a2a49f60f0ce.png

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)  

a9d42b33e6567d392bc0da4153222454.png

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

b86d514008129472edf2ac1af297ad7a.png

使用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)

f46c65bad4960685fe5fedfd7d69ae95.png

另外在做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)

ff1defbe5c1f4708c75f6038cc565b2c.png

如果想要注释其他信息,例如符号,也可以在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,可以很方便地注释

d9c855d9eb0eb18091fb31b48672c928.png

结尾:

今天的介绍就到这里,希望大家持续关注我们,下期再见 :)

往期回顾:

python作图学习(2)

Python作图学习(1)

Python也可以画boxplot

c8d160fb3399322d4d362f4bf85ae2b5.png

d1d3d2ef81745691068c9f583893fd1f.png


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