日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python绘制dotplot

發布時間:2024/1/23 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python绘制dotplot 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 安裝
      • 模塊導入
      • 數據準備
      • 畫圖
      • 寫在篇末

??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() DescriptionGeneRatioBgRatiopvaluep.adjustqvaluegeneIDCountgroupIDGO:0002455GO:0006958GO:0006956GO:0038096GO:0002673
humoral immune response mediated by circulatin...22/178150/1867019.36599316.22219716.298589HLA-DQB1/CD55/IGHM/PTPRC/TRBC2/IGHG2/IGKV3-20/...22B6_up
complement activation, classical pathway20/178137/1867017.58878914.98906215.065454CD55/IGHM/TRBC2/IGHG2/IGKV3-20/IGHV4-34/IGHV3-...20B6_up
complement activation20/178175/1867015.45368413.00885913.085251CD55/IGHM/TRBC2/IGHG2/IGKV3-20/IGHV4-34/IGHV3-...20B6_up
Fc-gamma receptor signaling pathway involved i...18/178139/1867014.91669312.67598812.752379PTPRC/LYN/IGHG2/IGKV3-20/IGHV4-34/IGHV3-30/IGL...18B6_up
regulation of acute inflammatory response18/178159/1867013.87161411.81767411.894066HLA-E/CD55/IGHG2/IGKV3-20/IGHV4-34/IGHV3-30/IG...18B6_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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。