分享

Python | 教你用matplotlib绘制物种组成图

 CharlesNice 2020-10-18

在微生物组信息分析中,样品的物种组成情况可以说是分析得以展开的基石。而到了写论文时,物种组成图又成了必不可少的标配。看到别人家的文章里一张又一张的高颜值图表,谁不想亲手打造一张美图呢?想改哪里改哪里,想用什么颜色就用什么颜色,只听自己的审美,就是这么freestyle话不多说,小锐这就教大家用Python绘制物种组成图,而且是多样品情况下的柱状图哦~

美美哒图长这个样子

当样品较多时,

柱状图可同时反映多个样品中的物种组成,

视觉效果直观明朗。

先拿一张锐翌出品的物种组成柱状图镇帖!

横坐标为样品名称,纵坐标为物种丰度。

柱状图从种水平展示了各样品Top15的物种组成情况,而Top15以外物种的丰度之和用黑色表示。

安装python和matplotlib包

① 本文选择的计算机语言是python,可以从如下网址中选择与电脑系统相匹配的python版本:https://www./ftp/python/。

在本文中所讲述的都是基于python3.6.1版本。

② 将安装目录下的bin路径添加到系统的环境变量中。

③ 我们需要安装matplotlib包。进入安装目录下的Scripts文件夹中,按住shift并点击鼠标右键,打开dos窗口,输入pip install matplotlib,系统会自动下载并安装这个包和这个包所有的依赖包。安装成功如下图所示:

开始绘图

这儿和大家分享的图稍微简单些,是5个样本构成的物种组成柱状图,每个样本中有5种物种。配色是同色系的蓝色,大家在操作过程中可以作更多调节。它的特点是,还配有一张表格。这意味着不仅定性地描绘了属水平下各个菌的丰度值,而且还能从表格中定量地获得各个菌的丰度值。

代码如下:

import numpy as np
import matplotlib.pyplot as plt

data = [[  6.638,  1.742,  7.513,  5.728,   3.215],
        [  5.823,  3.811,  7.845,  9.938,   1.654],
        [  8.913,  8.055,  1.558,  4.981,   6.035],
        [  7.841,  8.185,  1.506,  1.463,   6.538],
        [  9.361,  3.315,  3.434,  7.813,   5.269]]

columns = ('name1', 'name2', 'name3', 'name4', 'name5') # 横坐标数值
rows = ['genus %d' % x for x in (1, 2, 3, 4, 5)] # 表格第一列名称

values = np.arange(0, 40, 10) # 纵坐标数值

# 选取几种颜色

colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))
n_rows = len(data)

index = np.arange(len(columns)) + 0.3
bar_width = 0.4

y_offset = np.array([0.0] * len(columns))

# 绘制条形图
cell_text = []
for row in range(n_rows):
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
    y_offset = y_offset + data[row]
    cell_text.append(['%1.1f' % (x) for x in y_offset])
# 反转颜色和标签
colors = colors[::-1]
cell_text.reverse()

# 在x轴底部添加一个表

the_table = plt.table(cellText=data,
                      rowLabels=rows,
                      rowColours=colors,
                      colLabels=columns,
                      loc='bottom')

plt.subplots_adjust(left=0.2, bottom=0.2)

plt.ylabel('Expression/10^-5')
plt.yticks(values, ['%d' % val for val in values])
plt.xticks([])
plt.title('Otu Abundance')

plt.show()

代码在手  还等什么

赶紧实战起来吧

绘制一张你的专属分析图

更多干货  持续分享中

敬请期待

供稿:马圣

编辑:王丽燕

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多