笔者本次复刻的图片来自于《Diversifying crop rotation increases food production, reduces net greenhouse gas emissions and improves soil health》中的雷达图。

这张雷达图非常直观地展示了六种不同农作物轮作模式在8项关键指标上的综合表现。
雷达图的本质就是直观的展现以及比较不同物种的在所有属性上的差异。
以下是笔者复刻结果:

import pandas as pd
from pycirclize import Circos
# =========================================================
# 1. 读取测试数据
# =========================================================
df = pd.read_csv('./test.txt',sep='\t',index_col=0)
# =========================================================
# 2. 配置颜色映射 (尽量还原你原图的红、橙、蓝、绿等配色)
# =========================================================
cmap_colors = {
"WM": "#D55E00", # 红色
"SpWM": "#E69F00", # 橙色
"PWM": "#56B4E9", # 浅蓝色
"SWM": "#009E73", # 绿色
"SmWM": "#0072B2", # 深蓝色
"RSWM": "#CC79A7"# 紫色/洋红 (原图青色区分度不高,这里换了个醒目颜色)
}
# =========================================================
# 3. 调用 pyCirclize 绘制雷达图
# =========================================================
# 根据数据最大值设置 vmax,让图形撑满画布
vmax_val = df.values.max()
circos = Circos.radar_chart(
df,
vmax=vmax_val,
vmin=0,
cmap=cmap_colors, # 应用自定义颜色
fill=False, # 填充区域
marker_size=12, # 顶点标记大小
bg_color=None, # 不设背景色,保持洁白干净
circular=True, # False = 多边形雷达图; True = 圆形雷达图
grid_interval_ratio=0.1,# 控制内部网格线的疏密程度
show_grid_label=False,
grid_line_kws={"color": "grey", "ls": "--", "lw": 0.5}, # 网格线样式
label_kws_handler=lambda colname: {
"size": 14,
"rotation": 0,
"color": "black",
"fontweight": "bold"# 顺便加粗,让标题更清晰
},
line_kws_handler=lambda rowname: {"lw": 1.3, "ls": "-","alpha": 0.7}, # 线条样式
marker_kws_handler=lambda _: dict(marker="o", ec="black", lw=0.9,), # 顶点样式
)
# =========================================================
# 4. 渲染并保存图片
# =========================================================
fig = circos.plotfig(figsize=(8, 8))
# 调整图例位置
_ = circos.ax.legend(loc="upper right", fontsize=12, frameon=False, fancybox=True, framealpha=0.8,bbox_to_anchor=(1.5, 1.05))
# 保存为高分辨率图片
fig.savefig("crop_rotation_radar.png", dpi=300, bbox_inches='tight')
结果展示:

雷达图可以展示不同物品在几种不同属性下的信息,直观的进行可视化,比较不同物品的不同状态。使用pycirclize可以很轻松的绘制雷达图,但pycirclize的功能不止于此,笔者在后续会继续分享pycirclize的进阶使用。
如果需要此文的测试数据,可以联系笔者进行获取。
如果需要此文的测试数据,可以联系笔者进行获取,另外笔者也创建一个数据分析交流群,可以扫描二维码添加笔者联系方式,拉你入群,笔者作为群主会不定时发放福利,另外群内含有众多大佬,不定时分享就业以及科研经验解决你的生信分析难题。