教你怎么用python绘制dotplot

一、前言

R语言不少库都可以方便的画dotplot,但是低频使用R这么多年,我依旧觉得R不是一门真正的编程语言。目前,在python中绘制dotplot貌似没有很轻量、方便的库,因此工作之余写了这个python_dotplot包,方便自己也希望能够方便他人吧。

二、安装

可以通过pypi快速安装:

pip install python_dotplot

该package当然可能存在一定的bug,所以也会处于不断迭代的过程中,可以通过以下方式获得特定或最新版本

pip install python_dotplot --upgrade
pip install python_dotplot==0.0.1b1

如果通过--upgrade参数不能获得最新版本,国内镜像会有一定的延迟,可指定pypi官方源指定镜像:

pip install -i https://pypi.python.org/pypi python_dotplot

三、模块导入

import dotplot
import dotplot.utils
import pandas as pd

%config InlineBackend.figure_format = 'retina'  # 如果你的电脑设备是视网膜屏,可指定该参数渲染jupyter图像,会超清晰,超好看

包的层级结构很简单,主要包括以下模块:

dotplot

├── cmap.py # 自定义color map

├── core.py # 实现了Dotplot类,用于封装数据以及绘图

├── hierarchical.py # 实现了层次聚类,用于支持dotplot行和列通过层次聚类进行自动排序

├── __init__.py # 初始化模块

└── utils.py # 实用函数,目前是夹带私货,我自己用的预处理函数,也许对其他人也有用

四、数据准备

我们首先需要准备一个数据,这里要求输入必须是一个tidy data格式的pandas Dataframe,简而言之,tidy data是指在该数据框中每一行是一个观测,每一列是一个属性,下面以示例数据为例:

term_list = ['GO:0002455', 'GO:0006958', 'GO:0006956', 'GO:0038096','GO:0002673',
             'GO:0051251', 'GO:0060333', 'GO:0006910','GO:0002483', 'GO:0002440',
             'GO:0009141', 'GO:0009123', 'GO:0006119', 'GO:0009260', 'GO:0015985', 'GO:0015986', 'GO:0006260',
            'GO:0044843', 'GO:0061621', 'GO:0061718']

up = pd.read_csv('./example_data/group1.csv', header=0, index_col=0)
down = pd.read_csv('./example_data/group2.csv', header=0, index_col=0)

data = dotplot.utils.merge_clusterprofile_results(dataframes=(up, down), groups=['B6_up', 'B6_down'], term_list=term_list)
data.head()
Description GeneRatio BgRatio pvalue p.adjust qvalue geneID Count group
ID
GO:0002455 humoral immune response mediated by circulatin... 22/178 150/18670 19.365993 16.222197 16.298589 HLA-DQB1/CD55/IGHM/PTPRC/TRBC2/IGHG2/IGKV3-20/... 22 B6_up
GO:0006958 complement activation, classical pathway 20/178 137/18670 17.588789 14.989062 15.065454 CD55/IGHM/TRBC2/IGHG2/IGKV3-20/IGHV4-34/IGHV3-... 20 B6_up
GO:0006956 complement activation 20/178 175/18670 15.453684 13.008859 13.085251 CD55/IGHM/TRBC2/IGHG2/IGKV3-20/IGHV4-34/IGHV3-... 20 B6_up
GO:0038096 Fc-gamma receptor signaling pathway involved i... 18/178 139/18670 14.916693 12.675988 12.752379 PTPRC/LYN/IGHG2/IGKV3-20/IGHV4-34/IGHV3-30/IGL... 18 B6_up
GO:0002673 regulation of acute inflammatory response 18/178 159/18670 13.871614 11.817674 11.894066 HLA-E/CD55/IGHG2/IGKV3-20/IGHV4-34/IGHV3-30/IG... 18 B6_up

五、画图

首先我们可以借助 DotPlot的类方法parse_from_tidy_data 对数据进行封装,然后直接调用plot函数进行绘图。当然,你也可以通过DotPlot的构造函数__init__()来实例化DotPlot对象。

  • 一维数据展示
new_keys = {'item_key': 'Description','group_key': 'group','sizes_key': 'Count'}
dp = dotplot.DotPlot.parse_from_tidy_data(data, **new_keys)
sct = dp.plot(size_factor=10, cmap='Reds')  # 通过size_factor 调节图中点的大小

dp = dotplot.DotPlot.parse_from_tidy_data(data, item_key='Description', group_key='group', sizes_key='Count')  # 该效果完全同上,这是python语言特性
sct = dp.plot(size_factor=10, cmap='Reds')

  • 二维数据展示

我们可以通过color_key指定data中的列做颜色映射。

new_keys = {'item_key': 'Description','group_key': 'group','sizes_key': 'Count','color_key': 'pvalue'}
dp = dotplot.DotPlot.parse_from_tidy_data(data, **new_keys)
sct = dp.plot(size_factor=10, cmap='Reds', cluster_row=True)

  • ​三维数据展示

可以通过circle_key增加一列作为虚线圆圈的映射。

DEFAULT_CLUSTERPROFILE_KEYS = {
    'item_key': 'Description', 'group_key': 'group',
    'sizes_key': 'Count', 'color_key': 'pvalue',
    'circle_key': 'qvalue'
}
dp = dotplot.DotPlot.parse_from_tidy_data(data, **DEFAULT_CLUSTERPROFILE_KEYS)
sct = dp.plot(size_factor=10, cmap='Reds', cluster_row=True)

当然,更多的参数我们可以通过signature来查看,我对这些参数都做了类型注释,应该是通俗易懂的:

?dp.plot
Signature:
dp.plot(
    size_factor:float=15,
    vmin:float=0,
    vmax:float=None,
    path:Union[os.PathLike, NoneType]=None,
    cmap:Union[str, matplotlib.colors.Colormap]='Reds',
    cluster_row:bool=False,
    cluster_col:bool=False,
    cluster_kws:Union[Dict, NoneType]=None,
    **kwargs,
)
Docstring:
:param size_factor: `size factor` * `value` for the actually representation of scatter size in the final figure
:param vmin: `vmin` in `matplotlib.pyplot.scatter`
:param vmax: `vmax` in `matplotlib.pyplot.scatter`
:param path: path to save the figure
:param cmap: color map supported by matplotlib
:param kwargs: dot_title, circle_title, colorbar_title, dot_color, circle_color
            other kwargs are passed to `matplotlib.Axes.scatter`
:param cluster_row, whether to cluster the row
:param cluster_col, whether to cluster the col
:param cluster_kws, key args for cluster, including `cluster_method`, `cluster_metric`, 'cluster_n'
:return:

因此,我们可以通过关键字参数修改图例中的部分组件:

sct = dp.plot(size_factor=10, cmap='Reds', cluster_row=True,
dot_title = 'Count', circle_title='-log10(qvalue)',
colorbar_title = '-log10(pvalue)')

六、写在篇末

dotplot在数据可视化中是一个强有力的展示方式,选择一个合适的可视化方式胜过千言万语

最后,最适合的可视化方式是最直观、最简洁的,不是炫技,别被花里胡哨的可视化所迷住双眼而忽略了信息的传达。

到此这篇关于教你怎么用python绘制dotplot的文章就介绍到这了,更多相关python绘制dotplot内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 看看如何用Python绘制小米新版天价logo

    最终呈现效果 哈哈,咋们在讲述之前,首先看看最终呈现的效果吧,整体来说还是很不错的. 小米 "新" logo背后的数学 前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo了. 很多人,都觉得雷总被骗了.说实话,我当时猛的一看,也是很蒙蔽,可能咋们不懂美学,不懂新logo背后蕴藏的文化底蕴吧! 但是,原设计者原研哉说到:最新设计的小米logo,融入了东方哲学的思考,从而提出了一个具有「超椭圆」数学之美的小米新 LOGO,同时还增加了黑色和科技银来作为小米品牌色彩的新搭档

  • python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)

    最近学了下 python opencv,分享下使用 opencv 在图片上绘制常用图形的方法. 案例中实现了在图片中添加线段.圆形.矩形.椭圆形以及添加文字的方法,使用 opencv2 实现的. 实现方法 1)画线段 cv.line 在图片中绘制一段直线 # 绘制线段 # 参数1:图片 # 参数2:起点 # 参数3:终点 # 参数4:BGR颜色 # 参数5:宽度 cv2.line(img, (60, 40), (90, 90), (255, 255, 255), 2); 参数说明 参数 值 说明

  • 用Python的绘图库(matplotlib)绘制小波能量谱

    时间小波能量谱 反映信号的小波能量沿时间轴的分布. 由于小波变换具有等距效应,所以有: 式中 表示信号强度,对于式①在平移因子b方向上进行加权积分 式中 代表时间-小能量谱 尺度小波能量谱 反映信号的小波能量随尺度的变化情况. 同理,对式①在尺度方向上进行加权积分: 式中 连续小波变换 连续小波变换的结果是一个小波系数矩阵,随着尺度因子和位移因子变化.然后将系数平方后得到小波能量,把每个尺度因子对应的所有小波能量进行叠加,那么就可以得到随尺度因子变换的小波能量谱曲线.把尺度换算成频率后,这条曲线

  • python 绘制斜率图进行对比分析

    你好,我是林骥. 斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据. 比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果: 你不妨自己先思考一下,如何对这组数据进行可视化,才能让信息传递变得更加高效? 下面是我用 matplotlib 制作的图表: 从图中可以直观地看出,功能 C 的用户满意度明显下降,我们用比较鲜明的橙色来表示,以便引起观众重点关注:功能 D 和功能 E 的用户满意度明显提升,我们用蓝色表示,代表数据正在向

  • python爬取股票最新数据并用excel绘制树状图的示例

    大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图来自金融界网站-大盘云图: 那么,今天我们试着用python爬取最近交易日的股票数据,并试着用excel简单绘制以下上面这个树状图.本文旨在抛砖引玉,吼吼. 1. python爬取网易财经不同板块股票数据 目标网址: http://quotes.money.163.com/old/#query=hy

  • python绘制汉诺塔

    本文实例为大家分享了python绘制汉诺塔的具体代码,供大家参考,具体内容如下 源码: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): return len(self.items) == 0 def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(se

  • 通过python读取txt文件和绘制柱形图的实现代码

    目的 临床数据的记录时间和对应标签(逗号后面的数字)记录在txt文件里,要把标签转换为3类标签,并且计算出每个标签的分别持续时间,然后绘制成柱形图方便查阅. 小难点分析: (1)txt的切割读取对应内容 (2)时间差计算 txt文件如图: 使用效果 首先将原始txt转换为  左列新标签 右列持续时间 绘制为柱形图 为了直观,每次只最多显示 2个小时,同时横坐标还是按照临床的记录时间顺序. 代码实现 # -*- coding: utf-8 -*- from datetime import date

  • 用python 绘制茎叶图和复合饼图

    茎叶图 from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,195,225,185,200, 220,200,210,271,240,220,230,215,252,225,220,206,185,227,236] for k, g in groupby(sorted(nums2), key=lambda x: int(x) // 10): print (k, list(g)) # p

  • Python绘制分类图的方法

    前言 遥感影像分类图一般为特定数值对应一类地物,用Python绘制时,主要在颜色的映射和对应的图例生成. plt.matplotlib.colors.ListedColormap支持自定义颜色.matplotlib.patches mpatches对象可以生成一个矩形对象,控制其颜色和地物类型的颜色对应就可以生成地物分类的图例了.具体用法可以自行Google和百度.下面给出一个模拟地物分类数据的可视化例子. 代码 import numpy as np import matplotlib.pypl

  • 教你怎么用python绘制dotplot

    一.前言 R语言不少库都可以方便的画dotplot,但是低频使用R这么多年,我依旧觉得R不是一门真正的编程语言.目前,在python中绘制dotplot貌似没有很轻量.方便的库,因此工作之余写了这个python_dotplot包,方便自己也希望能够方便他人吧. 二.安装 可以通过pypi快速安装: pip install python_dotplot 该package当然可能存在一定的bug,所以也会处于不断迭代的过程中,可以通过以下方式获得特定或最新版本 pip install python_

  • 一篇文章教你学会使用Python绘制甘特图

    目录 优点 局限 一日一书 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project.GanttProject.WARCHART XGantt.jQuery.Gantt.Excel等,网络上也有一些优质工具支持在线绘制甘特图. 可是这种现成的工具,往往也存在一些弊端,让编程人员不知所措.比如说,花里胡哨的UI,让人目不暇接,不知点哪个才好: 比如说,有些基于浏览器的图表需要掌握HTML.JS等编程语言,只会点Python的我直接被劝退: 再比如,进来就是注册.登

  • 圣诞节教你用Python绘制爱心圣诞树

    心血来潮的一个想法,分享一下代码 代码 # -*- coding: utf-8 -*- """ Created on Sat Dec 12 12:29:09 2020 @author: haoyu """ import turtle as t import random # 爱心函数 # 将爱心分为两个半圆与一个正方形 # r为半圆半径,l = 2r为正方形边长 # 调整半径即可调整爱心大小 def loving_heart(r): l = 2

  • 手把手教你使用Python绘制时间序列图

    目录 01从Quandl检索数据集 02绘制收盘价与成交量的关系图 03绘制烛台图 导读:分析时间序列数据的一种简单而有效的方法就是将时间序列数据可视化在一个图表上,这样我们就可以从中推断出某些假设.本文将以股价数据集为例,指导你从Quandl下载股价数据集,并将这些数据绘制在价格和成交量图表上.还将教大家绘制烛台图,比起直线图表,这将给我们更多的信息. 01从Quandl检索数据集 Quandl简介 Quandl是一个为金融.经济和另类数据服务的平台,这些数据由各种数据发布商提供,包括联合国.

  • 三分钟时间教你用Python绘制春联

    目录 前言 实现 总结 前言 春联是中国传统文化中最具内涵的元素之一,它以对仗工整.简洁精巧的文字描绘美好形象,抒发美好愿望,是中国特有的文学形式,是华人们过年的重要习俗.每逢春节期间,无论城市还是农村,家家户户都要精选一副大红春联贴于门上,辞旧迎新,以增加节日的喜庆气氛. 据考证,这一习俗起于宋代,盛于明代.有据可查的最早的春联是“三阳始布,四序初开”,始见于莫高窟藏经洞出土的文物中,撰联人为唐人刘丘子,作于开元十一年(公元723年).如今卖春联的景象是这样的: 当今时代的人,大多只是粗通文墨

  • 手把手教你用python绘制热度图(heatmap)

    目录 1.简单的代码 2.添加X轴和Y轴标签和标题: 3.对右侧的色条(colorbar)进行调整: 4.修改色条的刻度值和标签的字体大小.颜色: 5.对热度图显示数值和添加网格线: 6. 定义热度图的配色板 总结 1.简单的代码 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pd #练习的数据: data=np.arange(25).reshape(5

  • 教你学会通过python的matplotlib库绘图

    一.前言 python的matplotlib库很强大可以绘制各种类型的图像. 首先要装一些基础的库,如numpy,matplotlib或是pandas. 二.基础命令 首先介绍绘图时常用的基础命令: 1.plt.plot(x,y)即为绘图命令. ①基础画图: plt.plot(x, y) ②设置颜色: color属性 如果没有特别要求的话可以不手动设置颜色,如果要在一张图上画不同的线时,会自动分配颜色.也可以使用ax.plot效果相同. plt.plot(x, y, color = 'red')

  • 拒绝盗图!教你怎么用python给图片加水印

    方式一:叠加文字水印 最简单的一种方式是,在图片上绘制半透明文本来实现水印效果. 主要用到Figure.text函数 参数 类型 说明 x, y float 叠加文本的位置坐标.,取值范围在 [0, 1]. s str 文本字符串. fontdict dict 可选 用于覆盖默认文本属性的字典.如果未给出,则默认值由 rcParams["font.*"]确定.作为kwargs传递的属性,会覆盖fontdict 中给出的相应属性. 叠加文字水印的代码如下 import numpy as

  • 教你如何用Python实现人脸识别(含源代码)

    工具与图书馆 Python-3.x CV2-4.5.2 矮胖-1.20.3 人脸识别-1.3.0 若要安装上述软件包,请使用以下命令. pip install numpy opencv-python 要安装FaceRecognition,首先安装dlib包. pip install dlib 现在,使用以下命令安装面部识别模块 pip install face_recognition 下载人脸识别Python代码 请下载python面部识别项目的源代码: 人脸识别工程代码 项目数据集 我们可以使

  • Python 绘制北上广深的地铁路线动态图

    目录 坐标点的采集 坐标系的转换 地理可视化 其他效果展示 上海-变色 广州-卫星图 深圳-个性化配色 小结 今天教大家用python制作北上广深--地铁线路动态图,这可能是全网最全最详细的教程了. 坐标点的采集 小五之前做过类似的地理可视化,不过都是使用网络上收集到的json数据.但很多数据其实是过时的,甚至是错误/不全的.所以我们最好还是要自己动手,丰衣足食(爬虫大法好).打开高德地图的地铁网页 可以轻松得到北京地铁数据的接口,同理也把其他三个城市的url复制出来.有了api,解析json即

随机推荐