全部代码如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_csv('data.csv')
pathways = df['pathway'].tolist()
num_genes = df['num_genes'].tolist()
p_values = df['p_value'].tolist()
# 示例pathway数据
for i in range(len(pathways)):
pathway = pathways[i]
genes = num_genes[i]
p_value = p_values[i]
print(f"pathway: {pathway}")
print(f"number of genes: {genes}")
print(f"p-value: {p_value}")
print("")
# 根据数量和显著性数据设置气泡的大小和颜色
bubble_sizes = np.array(num_genes) * 5 # 气泡的大小与基因数量成正比
bubble_colors = -np.log10(p_values) # 气泡的颜色与-p值成正比
# 创建气泡图
plt.figure(figsize=(10, 8))
plt.scatter(p_values,range(0, len(pathways)),s=bubble_sizes, c=bubble_colors, cmap='coolwarm', alpha=0.7, edgecolor='k')
# 设置纵坐标刻度标签为信号通路名称
plt.yticks(range(0,len(pathways)),pathways, fontsize=10)
# 设置图表标题和轴标签
plt.title('Pathway Bubble Plot')
plt.xlabel('-log10(p-value)')
# 添加颜色条
cbar = plt.colorbar(fraction=0.01,pad=0.08)
cbar.set_label('-log10(p-value)')
#创建图例
for gene in [1, 10, 20]:
plt.scatter([],[], c='b',
s=gene*10,
alpha=0.3,
label=str(gene))
plt.legend(scatterpoints=2,
labelspacing=1,
title="Number of Genes",
frameon=False,
bbox_to_anchor=(1, -0.05), loc=3, borderaxespad=1)
# 显示图表
plt.grid(True)
plt.tight_layout()
plt.tight_layout(rect=[0, 0, 0.85, 1])
plt.show()
# rect 参数是一个包含四个元素的列表,定义了一个矩形(left, bottom, right, top)来限制子图的布局区域。
# left:左侧边界的相对位置(0 到 1)。
# bottom:底部边界的相对位置(0 到 1)。
# right:右侧边界的相对位置(0 到 1)。
# top:顶部边界的相对位置(0 到 1)。
示例数据:
链接:https://pan.baidu.com/s/1eWYYKHcsN6vhSexrket_8w?pwd=lwf7
提取码:lwf7
示例图: