当前位置: 首页 > news >正文

python 环状图 (pycirclize)

在这里插入图片描述

# %% [markdown]
# # 环状图可视化
# 
# pyCirclize 的灵感来自 circlize 和 pyCircos。# %%
## 安装 必要包
%pip install pycirclize# %%
# 导入包
from pycirclize import Circos# %% [markdown]
# ### 设置扇形
# 在圆形布局中设置扇区时需要每个数据的大小,也可以设置扇区之间的空间大小# %%
# Initialize circos sectors
sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}
circos = Circos(sectors, space=5)for sector in circos.sectors:# Plot sector axis & name text# fc="none":表示填充颜色(face color)为 "none",即不填充任何颜色。# ls="dashdot":表示线型为虚实相间的点划线(dash-dot line style)。# lw=2:表示线宽为 2。# ec="black":表示边框颜色(edge color)为黑色。# alpha=0.5:表示透明度为 0.5(范围为 0 到 1,0 表示完全透明,1 表示完全不透明)。sector.axis(fc="none", ls="dashdot", lw=2, ec="black", alpha=0.5)sector.text(f"Sector: {sector.name}={sector.size}", size=15)print(sector)
fig = circos.plotfig()# %% [markdown]
# 可以自由设置圆形布局的起始和结束角度,范围从-360到360。以下代码是设置start=-270和end=30的示例# %%
# Initialize circos sectors
sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}
circos = Circos(sectors, space=5, start=-270, end=30) # Set start-end degree rangesfor sector in circos.sectors:# Plot sector axis & name textsector.axis(fc="none", ls="dashdot", lw=2, ec="black", alpha=0.5)sector.text(f"Sector: {sector.name}={sector.size}", size=15)fig = circos.plotfig()# %% [markdown]
# ### Set Tracks
# 可以在扇区半径范围(0 - 100)内自由放置磁道。以下代码是在每个扇区放置 3 条磁道的示例# %%
# Initialize circos sectors
sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}
circos = Circos(sectors, space=5)for sector in circos.sectors:# Plot sector axis & name textsector.axis(fc="none", ls="dashdot", lw=2, ec="black", alpha=0.5)sector.text(f"Sector: {sector.name}={sector.size}", size=15)# Set Track01 (Radius: 75 - 100)track1 = sector.add_track((75, 100))track1.axis(fc="tomato", alpha=0.5)track1.text(track1.name)# Set Track02 (Radius: 45 - 70)track2 = sector.add_track((45, 70))track2.axis(fc="cyan", alpha=0.5)track2.text(track2.name)# Set Track03 (Radius: 15 - 40)track3 = sector.add_track((15, 40))track3.axis(fc="lime", alpha=0.5)track3.text(track3.name)fig = circos.plotfig()# %% [markdown]
# ## Plot Data on Track# %%
import numpy as np
np.random.seed(0)sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}
circos = Circos(sectors, space=5)
for sector in circos.sectors:# Plot sector namesector.text(f"Sector: {sector.name}", r=110, size=15)# Create x positions & randomized y values for data plottingx = np.arange(sector.start, sector.end) + 0.5y = np.random.randint(0, 100, len(x))# Plot lineline_track = sector.add_track((75, 100), r_pad_ratio=0.1)line_track.axis()line_track.xticks_by_interval(1)line_track.line(x, y)# Plot pointspoints_track = sector.add_track((45, 70), r_pad_ratio=0.1)points_track.axis()points_track.scatter(x, y)# Plot barbar_track = sector.add_track((15, 40), r_pad_ratio=0.1)bar_track.axis()bar_track.bar(x, y)fig = circos.plotfig()# %% [markdown]
# 还可以按照如下方式在复杂的圆形布局中绘制更多数据# %%
rect_track.size
i * rect_size, i * rect_size + rect_size# %%
from pycirclize import Circos
from pycirclize.utils import ColorCycler
import numpy as npnp.random.seed(0)
ColorCycler.set_cmap("tab10")sectors = {"A": 200, "B": 140, "C": 160}
sector_colors = {"A": "red", "B": "blue", "C": "green"}
circos = Circos(sectors, space=10, start=90, end=360, endspace=False)for sector in circos.sectors:# Outer Trackouter_track = sector.add_track((95, 100))outer_track.text(sector.name, color="white")outer_track.axis(fc=sector_colors[sector.name])# interval=10:表示刻度标记之间的间隔为 10。例如,如果数据范围是从 0 到 100,那么刻度标记会出现在 0、10、20、30 等位置。# label_orientation="vertical":表示刻度标签的文字方向为垂直方向(vertical)。其他可能的值包括水平方向(horizontal)或其他自定义角度。outer_track.xticks_by_interval(interval=10, label_orientation="vertical")# Rectangle Trackrect_track = sector.add_track((90, 95))rect_size = 10# 循环遍历 rect_track 的大小范围,将其划分为多个矩形区域。# rect_track.size:表示轨道的总长度或大小。# rect_size:表示每个矩形的固定宽度。# int(rect_track.size / rect_size):计算可以划分的矩形数量(向下取整)for i in range(int(rect_track.size / rect_size)):# 定义当前矩形的起始位置 (x1) 和结束位置 (x2)# i * rect_size:当前矩形的起始位置,基于索引 i 和矩形宽度 rect_size 计算。# i * rect_size + rect_size:当前矩形的结束位置。x1, x2 = i * rect_size, i * rect_size + rect_size# 在 rect_track 上绘制一个矩形# x1, x2:矩形的起始和结束位置rect_track.rect(x1, x2, ec="black", lw=0.5, color=ColorCycler())# 在矩形中心添加文本标签。rect_track.text(str(i + 1), (x1 + x2) / 2, size=8, color="white")# Generate random x, y plot datax = np.arange(1, int(sector.size), 2)y = np.random.randint(0, 10, len(x))# Line Trackline_track = sector.add_track((80, 90), r_pad_ratio=0.1)line_track.axis()line_track.line(x, y, color="blue")# Scatter Trackscatter_track = sector.add_track((70, 80), r_pad_ratio=0.1)scatter_track.axis()scatter_track.bar(x, y, width=0.8, color="orange")# Bar Trackbar_track = sector.add_track((60, 70), r_pad_ratio=0.1)bar_track.axis()bar_track.scatter(x, y, color="green", s=3)# Fill Trackfill_track = sector.add_track((50, 60), r_pad_ratio=0.1)fill_track.axis()fill_track.fill_between(x, y, y2=0, fc="red", ec="black", lw=0.5, alpha=0.5)# Line + Bar + Scatter Trackline_bar_scatter_track = sector.add_track((40, 50), r_pad_ratio=0.1)line_bar_scatter_track.axis()line_bar_scatter_track.line(x, y, color="blue")line_bar_scatter_track.bar(x, y, width=0.8, color="orange")line_bar_scatter_track.scatter(x, y, color="green", s=3)# Plot text description
text_common_kws = dict(ha="left", va="center", size=8)
circos.text(" 01. Outer Track", r=97.5, color="black", **text_common_kws)
circos.text(" 02. Rectangle Track", r=92.5, color="grey", **text_common_kws)
circos.text(" 03. Line Track", r=85, color="blue", **text_common_kws)
circos.text(" 04. Bar Track", r=75, color="orange", **text_common_kws)
circos.text(" 05. Scatter Track", r=65, color="green", **text_common_kws)
circos.text(" 06. Fill between Track", r=55, color="red", **text_common_kws)
circos.text(" 07. Line + Bar + Scatter Track", r=45, color="purple", **text_common_kws)fig = circos.plotfig()# %% [markdown]
# ## Plot Link
# pyCirclize 实现了绘制扇区内或扇区间数据链接的功能。此功能使用户能够可视化数据之间的相互关系,例如网络和流# %%
sectors = {"A": 10, "B": 20, "C": 15}
name2color = {"A": "red", "B": "blue", "C": "green"}
circos = Circos(sectors, space=5)
for sector in circos.sectors:track = sector.add_track((95, 100))track.axis(fc=name2color[sector.name])track.text(sector.name, color="white", size=12)# 此方法用于在 track 对象上根据指定的间隔生成刻度标记(ticks)。# 刻度标记之间的间隔为 1track.xticks_by_interval(1)# Plot links
circos.link(("A", 0, 1), ("A", 7, 8))
circos.link(("A", 1, 2), ("A", 7, 6))
circos.link(("A", 9, 10), ("B", 4, 3))
circos.link(("B", 5, 7), ("C", 6, 8))
circos.link(("B", 18, 16), ("B", 11, 13))
circos.link(("C", 1, 3), ("B", 2, 0))
circos.link(("C", 11.5, 14), ("A", 4, 3))fig = circos.plotfig()# %%
from pycirclize import Circossectors = {"A": 10, "B": 20, "C": 15}
name2color = {"A": "red", "B": "blue", "C": "green"}
circos = Circos(sectors, space=5)
for sector in circos.sectors:track = sector.add_track((95, 100))track.axis(fc=name2color[sector.name])track.text(sector.name, color="white", size=12)track.xticks_by_interval(1)# Plot links with various styles
circos.link(("A", 0, 1), ("A", 7, 8))
circos.link(("A", 1, 2), ("A", 7, 6), color="skyblue")
circos.link(("A", 9, 10), ("B", 4, 3), direction=1, color="tomato")
circos.link(("B", 5, 7), ("C", 6, 8), direction=1, ec="black", lw=1, hatch="//")
circos.link(("B", 18, 16), ("B", 11, 13), r1=90, r2=90, color="violet", ec="red", lw=2, ls="dashed")
circos.link(("C", 1, 3), ("B", 2, 0), direction=1, color="limegreen")
circos.link(("C", 11.5, 14), ("A", 4, 3), direction=2, color="chocolate", ec="black", lw=1, ls="dotted")fig = circos.plotfig()# %%
from pycirclize import Circos
import numpy as np
np.random.seed(0)# Initialize Circos sectors
sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}
circos = Circos(sectors, space=5)for sector in circos.sectors:# Plot sector namesector.text(f"Sector: {sector.name}", r=110, size=15)# Create x positions & randomized y valuesx = np.arange(sector.start, sector.end) + 0.5y = np.random.randint(0, 100, len(x))# Plot line trackline_track = sector.add_track((80, 100), r_pad_ratio=0.1)line_track.xticks_by_interval(interval=1)line_track.axis()line_track.line(x, y)# Plot points trackpoints_track = sector.add_track((55, 75), r_pad_ratio=0.1)points_track.axis()points_track.scatter(x, y)# Plot bar trackbar_track = sector.add_track((30, 50), r_pad_ratio=0.1)bar_track.axis()bar_track.bar(x, y)# Plot links
circos.link(("A", 0, 3), ("B", 15, 12))
circos.link(("B", 0, 3), ("C", 7, 11), color="skyblue")
circos.link(("C", 2, 5), ("E", 15, 12), color="chocolate", direction=1)
circos.link(("D", 3, 5), ("D", 18, 15), color="lime", ec="black", lw=0.5, hatch="//", direction=2)
circos.link(("D", 8, 10), ("E", 2, 8), color="violet", ec="red", lw=1.0, ls="dashed")fig = circos.plotfig()

相关文章:

  • 【含文档+PPT+源码】基于微信小程序连锁药店商城
  • 基于 Python(selenium) 的百度新闻定向爬虫:根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容
  • 【Linux内核设计与实现】第三章——进程管理02
  • 在 Vue3 中封装的 Axios 实例中,若需要为部分接口提供手动取消请求的功能
  • 精益数据分析(22/126):解锁创业增长密码与长漏斗分析
  • 【黑马 微服务面试篇】
  • c# TI BQFS文件格式详解及C#转换
  • 数据库中ALTER SYSTEM、ALTER DATABASE、ALTER USER的使用
  • vite+vue2+elementui构建之 package.json
  • IDEA搭建环境的五种方式
  • .NET 10 中的新增功能
  • 微信小程序直传阿里云 OSS 实践指南(V4 签名 · 秒传支持 · 高性能封装)
  • FlinkSql入门与实践
  • Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法
  • https详解
  • mac brew 无法找到php7.2 如何安装php7.2
  • 深度解析:从12306看混合云架构下的高并发系统设计
  • 二十一、SQL Server数据库的备份(手动定时)和还原
  • Docker Macvlan网络配置实战:解决“network already exists“错误
  • IPv6 技术细节 | 源 IP 地址选择 / Anycast / 地址自动配置 / 地址聚类分配
  • 单位被裁定补缴12年社保,滞纳金该谁出?
  • 哈工大赵杰:人形机器人要拓展人的能力而非一味复制,未来产业要做成至少10年
  • 国家发改委党组在《人民日报》发表署名文章:新时代新征程民营经济发展前景广阔大有可为
  • 历史一刻,两个航天员乘组拍摄全家福
  • 银行板块整体走强,工行、农行、中行股价再创新高
  • 临汾攻坚PM2.5:一座曾经“爆表”城市的空气治理探索