matplotlib+seaborn绘图

最近需要用python做几个可视化分析,但是之前没怎么用过,决定借助这个机会学习一下,同时写批博客记录这个过程。

1. 建立画布

1. 建立画布,子图布局

import pandas as pd
import matplotlib.pyplot as plt,seaborn as sns

fig,ax = plt.subplots(1,3,figsize=(15,5))

 subplots是matplotlib中用于将多个图画在一个平面上的工具,可以用于组合图表。其中fig是画布对象,ax应该是一个包含有3个plot的numpy数组。

重要参数:

  • nrows:1,代表一行,这样得到的ax是一个一维子图数组,以此类推
  • ncols: 3,代表该行中有三个子图,默认是平均分配的。
  • figsize:(x,y),代表整个画布的大小,暂时没有搞清楚数值是如何计算得到的。
  • sharex,sharey:可以填写参数包括'col',每列共线相同的x或y轴;'row',同一行使用相同x或y轴;'all'所有图使用相同的x轴或y轴;True,等同于'all';Flase,各子图间相互独立
  • width_ratios 设置相对宽度,输入一个包含相对比例的列表,默认是各子图宽度均等
  • height_ratios 设置相对高度,输入一个包含相对比例的列表,默认是各子图高度均等

1.2 调整子图间距

plt.subplots_adjust(left=0,bottom=0,top=1,right=1,wspace=0.2,hspace=0.2)

参数:

  • 通过left,top,bottom,right4个参数控制子图四个边缘的距离,参数值为浮点数,该距离算在子图内部 ;数值代表的含义是图像占据的空间,1-value才等于留出的空白;由于坐标原点位于子图的左下方,通常只调整top和right的坐标,调控left和bottom可能会导致子图重叠
  • wspace和hspace代表子图间的列距和行距,行距和列距占据画布的总空间,因此调整行距和列距会影响子图的大小。

2. 绘制核密度曲线图

2.1 使用kdeplot绘制

示例代码

df=pd.read_csv(ksfile,index_col=None)

#### 构建数据

dSyn=df["dS-yn"].values

dSng=df["dS-ng"].values

#### 绘制密度曲线

sns.kdeplot(a=dSyn,label="dS-yn",ax=ax[0])

sns.kdeplot(a=dSng,label="dS-ng",ax=ax[0])

#### 设置行列标签、图例、标题

ax[0].set_xlabel("KS")

ax[0].set_ylabel("Density")

ax[0].legend(loc="best")

ax[0].set_title("Synonymous substitution rate")

#### 视图范围优化

ax[0].set_xlim(-0.2,1)

ax[0].set_ylim()

参数:

  • 输入数据结构:df或者numpy.ndarray数组
  • label:设置密度曲线标签,不设置的话无法打印图例
  • ax:指定子图

结果        

 

3. 盒型图和小提琴图

3.1 箱线图

关键词:

  • Q1:1/4值
  • median:中值
  • Q3:3/4值
  • IQR:Q1到Q3的距离
  • 1.5xIQR:箱须到Q1或者Q3的距离
  • fliers:箱须外的点

3.1.1 绘制箱线图图

ax[0,1].boxplot(df[[x[0],x[2]]].values,labels=[x[0],x[2]],patch_artist=False,showfliers=False)
ax[0,1].set_xlabel("KS KA distribution")
ax[0,1].set_ylim(0,0.8)
ax[1,1].set_ylim(-0.2,1)
ax[1,1].boxplot([df[x[1]]/df[x[0]].values,df[x[3]]/df[x[2]].values],labels=["dN/dS-yn","dN/dS-ng"],patch_artist=False,showfliers=False)

重要参数:

  • x(输入数据):如果是二维数组,则为 x 中的每一列绘制一个箱线图。 如果是一维数组序列,则为 x 中的每个数组绘制箱线图。
  • notch:选择箱子形状,通过布尔值控制,绘制有缺口的箱线图 (True) 或矩形箱线图 (False),有缺口的箱线图缺口表示中位数的置信区间;
  • sym:fliers的形状,通过字符串来控制,字符串为""时隐藏fliers
  • whis:控制箱须的长度,通过float值控制,为箱须长度value*IQR
  • vert:控制箱型图的方向,为True绘制垂直箱型图,为False绘制横向箱型图
  • bootstrap:通过整数指定,计算中位线置信区间是采用的重采样次数,为None时将采用基于高斯的渐近近似计算缺口;建议取值范围为1000-10000。
  • usermedians:指定中位数,填充数据为和箱型图数量相等的类数组数据,内部的值被指定为中位数;如果元素为None,箱体V型凹槽的位置由其他参数计算。
  • conf_intervals:是否指定置信区间。类型为类数组结构,形状为 (len(x), 2)。可选参数。如果元素不为None,则将该值强制设置为箱体V型凹槽位置(只有当notch参数为True时绘制);如果元素为None,箱体V型凹槽的位置由其他参数计算,例如bootstrap。
     
  • positions:指定箱体的位置。刻度和极值会自动匹配箱体位置。类型为类数组结构。可选参数。默认值为range(1, N+1) ,N为箱线图的个数。
  • widths:箱体的宽度。类型为浮点数或类数组结构。默认值为0.50.15*极值间的距离
  • patch_artist:控制箱体的生成对象。类型为布尔值,默认值为False;通过该选项可以调控箱体的颜色填充,为True时填充箱体颜色。
  • labels:每个数据集的标签,默认值为'None'。类型为序列。可选参数。
  • manage_ticks:控制刻度和标签位置,类型为布尔值,取值为True时,刻度和标签位置自动匹配箱线图的位置;当manage_tricks为False时,labels的标签将不会展示。
  • meanline:均值显示为线还是点。类型为布尔值,默认值为False。可选参数。当取值为True,且showmeansshownotches参数均为True,时显示为线,线条属性受meanprops参数控制;否则显示为点。
  • autorange:(不理解,没有看出True和Flase的效果差异)
  • zorder:用来控制绘图顺序,其值越大,画上去越晚,用于控制线条叠加顺序,在箱线图暂时没看出用处在哪。

其他样式控制参数:

  • showcaps:是否显示箱须两端的横杠。类型为布尔值,默认值为True。可选参数。
  • showbox:是否显示箱体。类型为布尔值,默认值为True。可选参数。
  • showfliers:是否显示离群值。类型为布尔值,默认值为True。可选参数。
  • showmeans:是否显示算术平均值。类型为布尔值,默认值为False。可选参数。
  • capprops:箱须横杠的样式。类型为字典,默认值为None。可选参数。
  • boxprops:箱体的样式。类型为字典,默认值为None。可选参数。
  • whiskerprops:箱须的样式。类型为字典,默认值为None。可选参数。
  • flierprops:离群点的样式。类型为字典,默认值为None。可选参数。
  • medianprops:中位数的样式。类型为字典,默认值为None。可选参数。
  • meanprops:算术平均值的样式。类型为字典,默认值为None。可选参数。
     

3.1.2 颜色调整

a=ax[1,1].boxplot([df[x[1]]/df[x[0]].values,df[x[3]]/df[x[2]].values],labels=["dN/dS-yn","dN/dS-ng"],patch_artist=True,showfliers=False)

a["boxes"][0].set_facecolor("lightblue")
a["boxes"][1].set_facecolor("lightblue")

a[boxes]是一个包含line2D实例的列表,在将patch_artist值设置为True后,可以内部的实例由line2D替换为Patch,然后通过Patch类的set_facecolor方法直接填充颜色。

3.2 小提琴图

3.2.1 绘制提琴图

def set_axis_style(ax, labels):
    ax.xaxis.set_tick_params(direction='out')
    ax.xaxis.set_ticks_position('bottom')
    ax.set_xticks(np.arange(1, len(labels) + 1), labels=labels)
    ax.set_xlim(0.25, len(labels) + 0.75)
    ax.set_xlabel('Sample name')

violin1=ax[0,2].violinplot(df[[x[0],x[2]]].values)
ax[0,2].set_xlabel("Ks calculation algorithm")
ax[0,2].set_ylabel("Ks values")
set_axis_style(ax[0,2],[x[0],x[2]])
ax[0,2].set_title("KS")
violin1=ax[1,2].violinplot([df[x[1]]/df[x[0]].values,df[x[3]]/df[x[2]].values])
ax[1,2].set_xlabel("Ks calculation algorithm")
ax[1,2].set_ylabel("Ka/Ks values")
set_axis_style(ax[1,2],[x[1],x[3]])
ax[1,2].set_title("Ka/Ks")

重要参数:

dataset:输入数据,类型通箱型图

vert:同箱型图

position:同箱型图

widths:小提琴图的最大宽度

showmeans,showmedians,showextrema:是否展示均值、中位数和极值。

quantiles:指定分位数线,根据个人需要,可以绘制多条。

points:int数据类型,定义用于评估每个高斯核密度估计的点数(这个不理解)。

bw_method:输入类型为字符串,绘制kde线的时候需要

data:略

注意:matplotlib.pyplot官网关于小提琴图没有提供刻度标签绘制的参数,可以通过example中提供的set_axis_style函数进行绘制。

4. 图片保存

fig.savefig('group1KS.png')
plt.close()

最终结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值