文章目录

  • 安装
  • 模块导入
  • 数据准备
  • 画图
  • 写在篇末

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

安装

可以通过pypi快速安装:

pip install python_dotplot

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

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

如果通过--upgrade参数不能获得最新版本,可能你使用我在博客pip修改安装镜像源中的方法设置过国内镜像,国内镜像会有一定的延迟,可指定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是指在该数据框中每一行是一个观测,每一列是一个属性(关于tidy data 和messy 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_colorother 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 gallery 或 data2viz。

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

python绘制dotplot相关推荐

  1. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  2. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  3. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

  4. python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)

    python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...

  5. 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)

    来源:大数据DT 本文约5400字,建议阅读10分钟 本文为你介绍数据分析时经常用到的折线图,可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图? 01 概述 折 ...

  6. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)

    来源:大数据DT(ID:hzdashuju) 作者:屈希峰,资深Python工程师,知乎多个专栏作者 本文约8000字,建议阅读20分钟 柱状图是当前应用最广泛的图表之一,你几乎每天都可以在电子产品上 ...

  7. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

  8. 利用Python绘制 3D 体素色温图

    简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...

  9. python绘制直方图显示数字_Python实现绘制双柱状图并显示数值功能示例

    本文实例讲述了Python实现绘制双柱状图并显示数值功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 import matplotlib.py ...

最新文章

  1. C语言的逗号!_只愿与一人十指紧扣_新浪博客
  2. 從明天起做個幸福的人...
  3. 漫画:如何在数组中找到和为 “特定值” 的三个数?
  4. .NET Framework/.NET Compact Framework/.NET Micro Framework功能集比较
  5. PowerShell-5.网络请求
  6. Django之中间件-CSRF
  7. linux防火墙 33001端口,Linux操作系统下IPTables配置方法详解
  8. 《C++面向对象高效编程(第2版)》——3.16 从函数中返回引用
  9. Mysql知识总结(二)
  10. Spring-jdbc-JdbcTemplate
  11. 以眼睛的名义:一些光度学概念的解析
  12. 【渝粤教育】广东开放大学 经济学基础 形成性考核 (25)
  13. 差分进化算法求解函数最优解matlab实现
  14. a 标签 jq js 打开新页面跳转
  15. 云查毒:避免恶意程序入侵的正确姿势
  16. 全屏滚动插件之 fullpage.js
  17. (java)跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
  18. 移动应用中的第三方SDK隐私合规检测,早知道
  19. 微信小程序不能下拉刷新
  20. 学习emwin,理解emwin,应用emwin

热门文章

  1. JUC锁-ReentrantReadWrite(五)
  2. 在一台超级计算机上,编号为1,2,…,n的n个作业等待批处理。批处理的任务就是将这n个作业分成若干批,每批包含相邻的若干作业。从时刻0开始,分批加工这些作业。在每批作业开始前,机器需要启动时间S,而完
  3. 蓝桥杯 试题 入门训练 Fibonacci数列——9行代码AC
  4. Spring注解 (更新中)
  5. 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o
  6. (*长期更新)软考网络工程师学习笔记——Section 17 交换技术原理
  7. 计算机网络实验(华为eNSP模拟器)——第二章 VRP通用路由平台介绍
  8. Linux buff/cache和清理占用过高
  9. Linux配置最基础的命令
  10. pid matlab 温度控制,基于MatlabPID温控系统设计与仿真.doc