python代码见下,细节部分注释了内容。希望能达到抛砖引玉的作用吧,祝大家科研顺利!
from pycirclize import Circos
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import pandas as pd
np.random.seed(0)
from matplotlib.patches import Patch
from matplotlib.lines import Line2D
circos = Circos.initialize_from_bed("chromosome.bed", space=1,start=5,end=355,endspace=False)
circos.text("图中标题,可以设置为组名vs组名", size=12, r=25,weight='bold')
circos.text("Gene density", size=10, r=16,weight='bold')
for sector in circos.sectors:
sector.text(sector.name, size=5)
outer_track = sector.add_track((98, 100))
outer_track.axis(fc="lightgrey")
major_interval = 10000000
minor_interval = 1000000
if sector.size > minor_interval:
outer_track.xticks_by_interval(major_interval, label_formatter=lambda v: f"{
v / 1000000:.0f} Mb" if v != 0 else None,label_size=4)
outer_track.xticks_by_interval(minor_interval, tick_length=1, show_label=False)
Hyper_CG=pd.read_table("CG_gDMR.hyper.txt",header=
pyCircos
Circos是用于可视化基因组相似性和特征的最著名的软件之一。 但是,执行需要如此复杂的过程和许多额外的输入文件。 该软件也是基于Perl编写的。 它限制了与其他用于生物学分析的软件的集成。 Python中描述了各种生物数据分析包。 但是,没有可以可视化Circos图的python软件包。 已经组织了用于描述基因组注释的文件格式,例如GenBank,GFF。 因此,如果可以将这些格式化的文件用作可视化的输入,则无需准备复杂的额外文件。 在这里,它提供了一个基于python matplotlib的圆形基因组可视化程序包PyCircos(化名)。 它使我们能够仅通过Genbank格式文件的输入来表示基因组特征。 此外,通过使用BLAST或LAST输入比较基因组分析结果,用户可以使用简单的python脚本轻松可视化多基因组基因座相似性。
python 3.6.2以后
一直觉得circos图 很好看,最近尝试了一下 对中间关系曲线的 绘制主要利用的数学工具是 贝塞尔曲线 但是对贝塞尔曲线中间的控制点取值 还是不太满意 造成部分曲线看着有点奇怪成品大概是这样代码如下:import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import random
Start1=[0 for ...
#### 推荐使用的库
为了在 Python 中绘制 Circos 图,`PyCirclize` 是一个非常合适的库。此库简化了创建复杂而美观的圆形布局图表的过程[^1]。
#### 安装依赖项
首先需要安装 `pycirclize` 及其可能用到的相关包:
```bash
pip install pycirclize matplotlib pandas seaborn
#### 数据准备
对于想要可视化的数据集来说,通常会涉及到多个维度之间的关系表达。例如,在微生物组学研究中,可以使用物种在不同样本中的相对丰度作为输入数据[^4]。这里假设有一个简单的表格形式的数据集,其中每一列代表不同的样本(如 A, B, C),每行则对应特定类别的数值(比如 Acetobacteraceae 科级别的分类单元)。这些数据应该被整理成适合处理的形式以便后续操作。
#### 示例代码:基于给定数据绘制基础版本的 Circos 图
下面是一个具体的例子来说明如何利用上述提到的技术栈实现这一目标:
```python
import numpy as np
import pandas as pd
from pycirclize import CircosPlotter
import matplotlib.pyplot as plt
def prepare_data():
"""Prepare sample data"""
df = pd.DataFrame({
'Sample_A': [87, 92, 65],
'Sample_B': [73, 88, 70],
'Sample_C': [68, 75, 80]
}, index=['Species_X', 'Species_Y', 'Species_Z'])
return df[df.max(axis=1)>0.01].T # Filter by abundance threshold and transpose dataframe
if __name__ == "__main__":
# Prepare the dataset
data_df = prepare_data()
# Initialize circos plot with sectors corresponding to samples
cp = CircosPlotter.from_dataframe(data_df)
# Add heatmap track for each species' relative abundances across all samples
for i, col in enumerate(data_df.columns):
values = data_df[col].values.tolist()
colors = ['red' if v >= max(values)*0.8 else 'blue' for v in values]
cp.add_heatmap_track(
sector_name="all_samples",
position=(f"{i*30}deg", f"{(i+1)*30}deg"),
heights=values,
facecolors=colors,
edgecolor='white',
linewidth=.5
fig, ax = plt.subplots(figsize=(8, 8))
cp.draw(ax=ax)
plt.show()
这段脚本展示了怎样加载并预处理数据,初始化圆圈图对象,并向其中添加热力条带以表示各个类别下的测量值分布情况。最终调用了绘图函数生成图像输出。