Repository navigation
选题规划:Python / Julia 科学可视化图表系列(调研汇总 × 覆盖度分析 × 分级选题清单) #389
Description
选题规划:Python / Julia 科学可视化图表系列(调研汇总 × 覆盖度分析 × 分级选题清单)
关联 #303(顶刊图社覆盖度分析)。该分析从「图型主题」维度评估了 Bizard;本 issue 从「编程语言」维度调研 Python / Julia 科学可视化生态,提出系统化的系列教程规划,供社区讨论与认领。
一、背景:语言覆盖严重失衡
基于 files/gallery_data.csv(2026-10-17 仓库状态)统计 822 条图例:
| Level1 | 图例数 | 占比 | 对应教程数 |
|---|---|---|---|
| BASICS(R) | 478 | 58.2% | ~200 |
| HIPLOT | 182 | 22.1% | — |
| OMICS | 118 | 14.4% | 19 |
| CLINICS | 27 | 3.3% | 6 |
| PYTHON | 14 | 1.7% | 4 |
| JULIA | 3 | 0.4% | 3 |
现有语言专区仅覆盖最基础图型(Scatter / Violin / Heatmap / Volcano)。但单细胞与计算生物学主流工具链(Scanpy、PyTorch 生态)以 Python 为主,Julia 在高性能科学计算中持续增长 —— 两大生态的系统化覆盖是 Bizard 用户的真实缺口。
二、调研方法
- 分类框架:From Data to Viz(7 大族 39 型)+ Python Graph Gallery 图表索引
- Python 生态:matplotlib gallery、seaborn examples、Plotly Python(含 Bioinformatics 专区),以及领域包文档:PyComplexHeatmap、Marsilea、pyCirclize、gseapy
- Julia 生态:Makie 文档绘图函数总表、BeautifulMakie、AlgebraOfGraphics、Plots/StatsPlots/GraphRecipes README、GMT.jl,并逐包核查 Julia General registry 的包存在性与维护状态(2026-10-17 GitHub API)
三、Python 生态:图表类型全景(12 大类)
| 大类 | 代表图型(中/英) | 核心实现 | 顶刊频率 |
|---|---|---|---|
| 分布 | 直方图、核密度、箱线、小提琴、蜂群、山脊图、雨云图、ECDF、Q-Q | seaborn (histplot/kdeplot/boxplot/violinplot/swarmplot)、joypy、ptitprince |
高 |
| 比较排序 | 分组/堆积条形、水平条形、棒棒糖、哑铃、斜率图、雷达、平行坐标 | matplotlib、seaborn、pandas | 高 |
| 占比组成 | 饼/环、百分比堆叠条、树图、旭日图、华夫饼、维恩 | matplotlib.pie、squarify、plotly px.sunburst、matplotlib-venn |
中 |
| 趋势时间 | 折线、面积/堆叠面积、河流图、阶梯、日历热图、预测带 | plt.plot/stackplot、seaborn |
高 |
| 关系相关 | 散点、气泡、回归带、2D 密度、hexbin、热图、相关矩阵、散点矩阵、边缘联合图 | seaborn (regplot/kdeplot/pairplot/jointplot)、plt.hexbin |
高 |
| 层次聚类 | 树状图、聚类热图、系统发育树 | scipy.dendrogram、seaborn.clustermap、pyCirclize |
高 |
| 矩阵注释热图 | 带注释热图、复杂注释热图、点阵热图、oncoprint、组合面板 | PyComplexHeatmap(ClusterMapPlotter/HeatmapAnnotation/oncoprint)、Marsilea |
高 |
| 网络流 | 网络图、弦图、桑基、冲积图、PAGA | networkx、pyCirclize chord_diagram、plotly go.Sankey、scanpy.pl.paga |
中 |
| 不确定性 | 误差棒、置信带、森林图、K-M 曲线、ROC/PR、校准曲线、Bland-Altman | plt.errorbar、lifelines、sklearn RocCurveDisplay、statsmodels |
高 |
| 多维复合 | 分面小倍数、PCA 得分图、点图(均值×检出率)、UpSet、3D 散点/曲面、等高线、矢量场 | seaborn FacetGrid、upsetplot、scanpy.pl.dotplot/umap、mplot3d |
高 |
| 组学生医 | 火山图、MA 图、曼哈顿图、UMAP/t-SNE 嵌入、堆叠小提琴、富集条形/点图、GSEA、Circos、序列 logo | bioinfokit、scanpy、gseapy、pyCirclize、logomaker |
高 |
| 空间地图 | 分级统计、气泡地图、连线地图 | plotly maps、geopandas | 中 |
matplotlib 痛点 → 教程价值高地(基础 matplotlib 难做、领域包才是正解):山脊图(joypy)、UpSet(upsetplot)、复杂注释热图/oncoprint(PyComplexHeatmap/Marsilea)、弦图/Circos(pyCirclize)、桑基(plotly)、密散射点文本避让(adjustText)、语法式分面(plotnine/seaborn)、出版级样式(SciencePlots)。
四、Julia 生态:覆盖与空白
技术栈格局(维护状态 2026-10)
| 技术栈 | 定位 | 状态 |
|---|---|---|
| Makie 生态(CairoMakie/GLMakie/WGLMakie/RPRMakie + AlgebraOfGraphics + GraphMakie/GeoMakie/SankeyMakie) | 现代默认:一套 API 四种后端,出版级排版(Figure/Axis/GridLayout),活跃(v0.24,2026-10 持续发版) | ✅ 首选 |
| Plots.jl + StatsPlots + GraphRecipes | 经典高层接口(GR/PythonPlot/PlotlyJS 后端);v2 开发中(StatsPlots/GraphRecipes 将并入) | |
| VegaLite.jl / PlotlyJS.jl | 声明式交互图形 | ✅ 维护中 |
| GMT.jl(地图)/ BioMakie.jl(生医,低活跃) | 领域专用 | ✅ / |
Julia 原生亮点(R/Python 一次调用难以对等)
rainclouds(雨云图)、waterfall(瀑布图)、bracket(显著性横线标注)、dendrogram、ecdfplot、voronoiplot/triplot—— 均为单函数原生 recipe- 体渲染:
volume(GPU 光线投射)、volumeslices、voxels—— 显微/断层/点云大数据独有优势 - Observables 反应式交互:参数联动更新 +
record()导出动画 - StatsPlots:
marginalhist/marginalkde/corrplot/cornerplot/ea_histogram一应俱全
Julia 明确空白(registry 逐包核查)
- Circos 圈图:无任何包(
Circos/CircosPlots不存在于 General registry) - oncoprint / 复杂注释热图:无对等包;火山图也无 helper 包
- treemap、雷达图、平行坐标、蜂群图需手绘;弦图仅 GraphRecipes arc-chord 模式
五、分级选题清单
设计原则:Python 系列追求与 R 版对等覆盖(高频基础 → 组学生医);Julia 系列覆盖基础 + 突出生态独有优势,空白图型不强凑(注明手绘路线即可)。每篇提供「Python 实现 × Julia 实现 × Bizard 现有 R 版对应」三列,Python/Julia 教程内互链对应 R 版教程。
P0 — 高频基础图(第一批,Python 8 + Julia 5)
| # | 教程(EN/中) | Python 实现 | Julia 实现 | 现有 R 版对应 |
|---|---|---|---|---|
| 1 | Bar Plot 分组/堆积条形图 | sns.barplot/countplot、pandas stacked |
barplot(dodge/stack)、StatsPlots groupedbar |
Stacked Bar 等 |
| 2 | Box Plot 箱线图 | sns.boxplot |
boxplot |
Distribution 系列 |
| 3 | Histogram & KDE 直方/核密度 | sns.histplot/kdeplot/displot |
hist/density/stephist |
Distribution 系列 |
| 4 | Line Plot + 置信带 | sns.lineplot + fill_between |
lines + band、errorline |
Group Line / Line(errorbar) |
| 5 | Ridgeline 山脊图 | joypy.joyplot |
手绘多轴(教学价值高) | Ridgeline |
| 6 | Raincloud 雨云图 | ptitprince |
rainclouds(Julia 原生单函数,作亮点) |
Half-Violin 组合(部分覆盖) |
| 7 | Lollipop & Dumbbell 棒棒糖/哑铃 | stem/hlines+scatter |
stem |
LollipopPlot |
| 8 | Joint & Pair Plot 边缘联合/散点矩阵 | sns.jointplot/pairplot |
StatsPlots marginalhist/cornerplot/corrplot |
— |
| 9-13 | Julia 基础补齐:Bar / Box / Hist-KDE / Line / Radar(手绘 polar) | — | 同上 | 同上 |
P1 — 组学与生医专用(第二批,Python 为主)
| # | 教程(EN/中) | Python 实现 | Julia 路线 | R 版对应 |
|---|---|---|---|---|
| 14 | Complex Heatmap 复杂注释热图 | PyComplexHeatmap ClusterMapPlotter + HeatmapAnnotation |
Makie 手绘 + GridLayout(空白高价值) | ComplexHeatmap |
| 15 | Oncoprint (Python) 肿瘤突变景观 | PyComplexHeatmap oncoprint / Marsilea |
无包,暂缓 | MutationOncoplot(已完成) |
| 16 | Circos 圈图 | pyCirclize(tracks/chord/link) | 无包(issue 中注明) | CellChatCirclePlot 等 |
| 17 | Chord Diagram 弦图 | pyCirclize chord_diagram |
GraphRecipes arc-chord | Sankey 系列 |
| 18 | Sankey 桑基图 | plotly go.Sankey |
SankeyMakie.jl(年轻包,注明) | Sankey Diagram |
| 19 | UpSet Plot | upsetplot |
无包,暂缓 | — |
| 20 | Forest Plot 森林图 | matplotlib 手绘 / forestplot |
手绘 | MetaForestPlot / Clinics |
| 21 | Kaplan-Meier 生存曲线 (Python) | lifelines |
手绘 | KaplanMeierPlot |
| 22 | ROC & PR 曲线 | sklearn RocCurveDisplay/PrecisionRecallDisplay |
手绘 | — |
| 23 | Enrichment Plot 富集条形/点图 | gseapy barplot/dotplot |
手绘 | TextEnrichmentBarPlot |
| 24 | 单细胞三部曲:UMAP 嵌入 / DotPlot / Stacked Violin | scanpy sc.pl.umap/dotplot/stacked_violin |
手绘 | — |
| 25 | Volcano 增强标注(adjustText) | 既有 Python/VolcanoPlot 增量更新 |
— | iVolcanoPlot |
P2 — 特色与高级(第三批)
| # | 教程 | 语言 | 要点 |
|---|---|---|---|
| 26 | 出版级样式(期刊 rcParams) | Python | SciencePlots(science/ieee/nature 样式), inches/DPI/SVG 导出规范 |
| 27 | 多面板组合图 | Python | GridSpec / subfigures / inset axes —— matplotlib 护城河 |
| 28 | 语法式绘图与分面 | Python | seaborn relplot/catplot 与 plotnine(ggplot 心智迁移) |
| 29 | 交互与大散点 | Python | plotly 交互 / datashader 百万点栅格化 |
| 30 | AlgebraOfGraphics 语法分面 | Julia | mapping(row=, col=) + draw,ggplot 用户迁移指南 |
| 31 | Makie 出版级多面板布局 | Julia | Figure/Axis/GridLayout(对标 R patchwork) |
| 32 | Observables 动画与交互 | Julia | 反应式更新 + record() 导出 mp4/gif |
| 33 | Volume 体渲染 | Julia | volume/volumeslices/voxels(显微/断层场景,其他生态稀缺) |
| 34 | GeoMakie / GMT.jl 地图 | Julia | 投影、岸线、choropleth(对标 Omics/PopulationMapPlot) |
六、实施约定
- 模板:遵循现有
## Example / ## Setup / ## Data Preparation / ## Visualization / ## References结构(参考Python/ScatterPlot.qmd) - 双语:每篇
X.qmd+X.zh.qmd,侧边栏只注册英文文件(babelquarto 自动处理 zh) - 注册:新教程在
_quarto.yml的 PYTHON / JULIA section 登记 +files/gallery_data.csv登记图例 - 依赖:Python 新包评估进
requirements.txt;Julia 新包进Julia/Project.toml并验证可渲染(如 pyCirclize、PyComplexHeatmap、joypy、upsetplot、gseapy、scanpy;Julia 侧 GraphMakie、SankeyMakie 等) - 互链:Python/Julia 教程交叉引用对应 R 版教程,方便用户跨语言迁移
- 节奏:每篇独立 PR(一个 PR = 一篇教程 en+zh),P0 批次可先行启动,认领时在本 issue 下留言防撞车
七、讨论点
- P0/P1/P2 的优先级排序是否符合社区需求?欢迎调整
- Julia 空白图型(circos/oncoplot/treemap)是「暂缓」还是「Makie 手绘教学」?倾向后者但工作量大
- 是否需要为 Python/Julia 增设独立二级分类目录(如
Python/Omics/),还是保持平铺 + 命名约定?
调研完成于 2026-10-17;Julia 包存在性经 Julia General registry 逐包核查;覆盖度统计基于 files/gallery_data.csv(822 条)与 _quarto.yml 源码。
Activity
ShixiangWang commentedon Oct 16, 2026
Batch 1 (P0) 已完成并通过本地渲染验证 → PR #395
raincloudsrecipe)全部 26 个文件(en+zh)以未修改状态本地渲染零错误;Python 代码对齐 seaborn 0.13 API,Julia 代码对齐当前 Makie 属性名(
rainclouds上游属性有变更,已逐一核对)。语言专区从 4/3 篇扩展至 12/8 篇。后续批次按 issue 中的 P1/P2 清单推进(complex heatmap、circos/chord、sankey、upset、生存/ROC、富集、单细胞三部曲;AoG 分面、出版级布局、体渲染、动画)。认领 P1 条目请在本 issue 下留言。
ShixiangWang commentedon Oct 17, 2026
Batch 1 CI 全绿 ✅(PR #395:全站渲染 57m + 隔离预览 31m 双通过,mergeable CLEAN)
期间修复的三类环境问题,供后续贡献者参考:
gaussian_kde手工分层,少一个依赖Pkg.instantiate()(QNR 只激活 Project.toml 从不装包)、Python 侧 setup-python + requirements.txthue=且横向模式 x/y 与 seaborn 惯例相反,教程内已注明P1 批次(complex heatmap / circos / sankey / upset / 生存·ROC / 富集 / 单细胞三部曲等)欢迎按第五节清单认领。
ShixiangWang commentedon Oct 17, 2026
覆盖矩阵 v2:面向「99% 常见学习/使用场景」的完整清单
P0 批次(13 篇)只覆盖了基础统计档。对照 data-to-viz 全谱 + 顶刊实际用法 + 学习者高频提问,把目标扩展为 Python ~55 篇 / Julia ~30 篇,按场景分八档(✅=已完成 · 🔜=下一批 · ⏳=后续批):
A. 基础统计(入门必修)
B. 分布比较进阶
山脊图 ✅ · 雨云图 ✅ · 蜂群/条带(并入箱线篇)✅ · 显著性横线标注 🔜(v1 遗漏)· 哑铃/棒棒糖 ✅ · 斜率图 🔜 · 雷达图(Py)/ ⏳
C. 关系与矩阵
散点矩阵/边缘联合 ✅ · 相关矩阵图(correlogram) 🔜 · 二维密度/hexbin 🔜 · PCA 得分图 🔜(v1 遗漏)· UMAP/t-SNE 嵌入 🔜 · 双轴/参考线(并入折线篇)✅
D. 集合与层次
维恩图 🔜(v1 遗漏)· UpSet 🔜 · 树状图/聚类热图 🔜 · 系统发育树 ⏳ · 树图/旭日 ⏳
E. 流与网络
弦图/Circos(pyCirclize) 🔜 · 桑基/冲积 ⏳(需 plotly 交互栈,单独立批)· 网络图(networkx)⏳ · PAGA ⏳
F. 生医专用
火山 ✅(已有) · MA 图 🔜 · 曼哈顿+QQ 🔜 · oncoprint ⏳ · 富集条形/点图 🔜 · 点图(均值×检出率) 🔜 · 序列 logo ⏳ · GSEA ⏳
G. 临床与模型评估
K-M 生存曲线 🔜 · 森林图 🔜 · ROC/PR 🔜 · 校准/混淆矩阵 🔜 · Bland-Altman ⏳ · Nomogram(已有 R 版,Py ⏳)
H. 出版工程(学习者最高频的「怎么做成顶刊样子」)
分面系统(FacetGrid/relplot) 🔜 · 多面板组合(GridSpec/subfigures) 🔜 · 出版级样式与导出(SciencePlots/rcParams/DPI/字体) 🔜 · 色彩系统与色盲安全 ⏳ · 标注精通(文本/箭头/括号)🔜(并入显著性篇)· 动画/交互 ⏳
Julia 侧补充原则
Julia 生态空白(circos/oncoprint/森林图等无包)不强凑;Julia 批次以 Makie 原生优势 + 基础对等 为界(~30 篇):增量含 饼/环 ✅🔜、堆叠面积、棒棒糖/哑铃、相关矩阵、误差棒/误差带、雷达、瀑布图、显著性 bracket、边缘分布组合、hexbin/等高线、PCA(LinearAlgebra SVD)、K-M/ROC 手绘、AoG 分面、出版级 GridLayout。
批次节奏
feat(languages): add B2 coverage batch — 13 more bilingual tutorials
ShixiangWang commentedon Oct 17, 2026
B2 + B3 批次已产出并推送(同 PR #395),覆盖矩阵推进至 Python 29 / Julia 17 篇
质量复核(逐篇执行):每篇以未修改状态本地渲染零错;13 张新 demo 逐一目检;科学性复核修正了 3 处设计问题(生存模拟随访不足致中位不可估、MA 显著性模型过松、森林图表头位置);en/zh 可执行代码一致性审计 46 对零漂移;sync-gallery 双表同步通过。
剩余:B4 出版工程(分面/GridSpec/SciencePlots/导出/色彩)+ 交互与地图类(需独立验证 plotly 渲染管线)。
ShixiangWang commentedon Oct 17, 2026
B4 出版工程批次完成(PR #395),系列矩阵基本达成 ✅
science+nature/ 300 dpi·SVG·字体不转曲)最终覆盖:语言专区 Python 32 篇 / Julia 20 篇(52 对教程,PR #395 共 141 文件 +11,210 行),CI 双渲染作业全绿(全站 1h05m + 预览 49m)。复核记录:逐篇未修改渲染、demo 目检、科学性修正、en/zh 代码零漂移审计、pandas 3 环境对齐重扫。
明确不做/缓做(边界):交互类(plotly/bokeh 桑基、地图)需先验证 quarto 交互渲染管线;Julia 体渲染需 GPU 后端,CI 无 GPU;GSEA/系统发育/空间组学留待需求驱动。后续新增按 #389 八档矩阵认领。
ShixiangWang commentedon Oct 17, 2026
终版盘点:八档覆盖矩阵完成 ✅(系列收官)
本 issue 从 #303 的顶刊图社覆盖分析出发,经 Python/Julia 生态系统调研,最终落地为 Python 40 篇 / Julia 20 篇的语言专区教程体系(60 对 en/zh,全部经未修改渲染验证 + demo 目检 + en/zh 代码零漂移审计),已全部合并上线。
交付轨迹
连带基础设施修复(过程中发现并修复)
边界(明确缓议)
后续新选题建议开独立 issue 并在认领时互相知会。感谢各位协作者!