Skip to content

选题规划:Python / Julia 科学可视化图表系列(调研汇总 × 覆盖度分析 × 分级选题清单) #389

Closed

Description

@ShixiangWang

选题规划: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 用户的真实缺口。

二、调研方法

三、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)

六、实施约定

  1. 模板:遵循现有 ## Example / ## Setup / ## Data Preparation / ## Visualization / ## References 结构(参考 Python/ScatterPlot.qmd)
  2. 双语:每篇 X.qmd + X.zh.qmd,侧边栏只注册英文文件(babelquarto 自动处理 zh)
  3. 注册:新教程在 _quarto.yml 的 PYTHON / JULIA section 登记 + files/gallery_data.csv 登记图例
  4. 依赖:Python 新包评估进 requirements.txt;Julia 新包进 Julia/Project.toml 并验证可渲染(如 pyCirclize、PyComplexHeatmap、joypy、upsetplot、gseapy、scanpy;Julia 侧 GraphMakie、SankeyMakie 等)
  5. 互链:Python/Julia 教程交叉引用对应 R 版教程,方便用户跨语言迁移
  6. 节奏:每篇独立 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

  1. ShixiangWang commented on Oct 16, 2026

    @ShixiangWang
    MemberAuthor

    Batch 1 (P0) 已完成并通过本地渲染验证 → PR #395

    • Python 8 篇:Bar / Box / Histogram & Density / Line / Ridgeline (joypy) / Raincloud (ptitprince) / Lollipop & Dumbbell / Joint & Pair
    • Julia 5 篇:Bar / Box / Histogram & Density / Line / Raincloud(原生 rainclouds recipe)

    全部 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 下留言。

  2. ShixiangWang commented on Oct 17, 2026

    @ShixiangWang
    MemberAuthor

    Batch 1 CI 全绿 ✅(PR #395:全站渲染 57m + 隔离预览 31m 双通过,mergeable CLEAN)

    期间修复的三类环境问题,供后续贡献者参考:

    1. joypy 0.2.6 与 CI 的 matplotlib 不兼容(本地旧版侥幸通过)→ Ridgeline 教程改为 scipy gaussian_kde 手工分层,少一个依赖
    2. pr-review 快速预览作业缺少 Julia/Python 环境(此前 PR 均为 R 教程,首次被语言专区暴露)→ 已补:Julia 侧 setup-julia + Pkg.instantiate()(QNR 只激活 Project.toml 从不装包)、Python 侧 setup-python + requirements.txt
    3. ptitprince/seaborn 0.13 API:half_violinplot 需 hue= 且横向模式 x/y 与 seaborn 惯例相反,教程内已注明

    P1 批次(complex heatmap / circos / sankey / upset / 生存·ROC / 富集 / 单细胞三部曲等)欢迎按第五节清单认领。

  3. ShixiangWang commented on Oct 17, 2026

    @ShixiangWang
    MemberAuthor

    覆盖矩阵 v2:面向「99% 常见学习/使用场景」的完整清单

    P0 批次(13 篇)只覆盖了基础统计档。对照 data-to-viz 全谱 + 顶刊实际用法 + 学习者高频提问,把目标扩展为 Python ~55 篇 / Julia ~30 篇,按场景分八档(✅=已完成 · 🔜=下一批 · ⏳=后续批):

    A. 基础统计(入门必修)

    图型 Python Julia 状态
    条形(分组/堆积/百分比) ✅ ✅ P0
    直方图/核密度/ECDF ✅ ✅ P0
    箱线/小提琴(含散点叠加) ✅ / ✅(已有) ✅ / ✅(已有) P0
    散点/气泡/回归带 ✅(已有) ✅(已有) 已有
    折线+置信带 ✅ ✅ P0
    饼图/环形图 🔜 🔜 B2 补(v1 清单遗漏)
    面积/堆叠面积/河流图 🔜 🔜 B2 补(v1 遗漏)
    热图(基础+注释) ✅(已有) 🔜 B2
    误差棒/点图+CI 随各篇嵌入 🔜(errorbar/errorline 专篇) B2

    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。

    批次节奏

    • B2(本批,执行中):A 档遗漏 + C/D 档高频(饼图、面积、维恩、UpSet、PCA、correlogram、二维密度、显著性标注 + Julia 对应)→ 约 8+5 篇
    • B3:F/G 档生医与诊断(MA、曼哈顿、富集、点图、K-M、森林、ROC、复杂热图、嵌入)→ 约 9+4 篇
    • B4:H 档出版工程 + 交互/地图/网络 → 约 6+3 篇
    • 完成后合计 Python ~30-32 / Julia ~20 篇语言专区 + 既有专题目录(Omics/Clinics 补充 Py/Julia 变体按需),基本达成 99% 学习场景覆盖;剩余长尾(GSEA、phylo、地图类)按需求追加。
  4. ShixiangWang commented on Oct 17, 2026

    @ShixiangWang
    MemberAuthor

    B2 + B3 批次已产出并推送(同 PR #395),覆盖矩阵推进至 Python 29 / Julia 17 篇

    • B2(13 篇):饼/环、面积/河流、维恩、UpSet、PCA、相关矩阵、二维密度、显著性标注(Py 8)+ 饼/环、面积/河流、棒棒糖/哑铃、相关矩阵、雷达(Julia 5)
    • B3(13 篇):MA、曼哈顿+QQ、生存(lifelines)、森林、ROC/PR、混淆矩阵、富集、复杂热图(PyComplexHeatmap)、Circos/弦图(pyCirclize)(Py 9)+ 生存、ROC/PR、森林、曼哈顿(Julia 4,生态无包,全部手写实现)

    质量复核(逐篇执行):每篇以未修改状态本地渲染零错;13 张新 demo 逐一目检;科学性复核修正了 3 处设计问题(生存模拟随访不足致中位不可估、MA 显著性模型过松、森林图表头位置);en/zh 可执行代码一致性审计 46 对零漂移;sync-gallery 双表同步通过。

    剩余:B4 出版工程(分面/GridSpec/SciencePlots/导出/色彩)+ 交互与地图类(需独立验证 plotly 渲染管线)。

  5. ShixiangWang commented on Oct 17, 2026

    @ShixiangWang
    MemberAuthor

    B4 出版工程批次完成(PR #395),系列矩阵基本达成 ✅

    • Python 3 篇:分面系统(relplot/catplot/FacetGrid)、多面板组合(GridSpec 边缘分布 + 字母标签 subfigures)、出版级样式与导出(house rcParams / SciencePlots science+nature / 300 dpi·SVG·字体不转曲)
    • Julia 3 篇:分面(AlgebraOfGraphics,已入 Julia/Project.toml)、多面板组合(GridLayout + linkxaxes + TopLeft 面板字母)、注释热图(GridLayout 条带 + 共享 Colorbar——Julia 版 ComplexHeatmap 答案)

    最终覆盖:语言专区 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 八档矩阵认领。

  6. ShixiangWang commented on Oct 17, 2026

    @ShixiangWang
    MemberAuthor

    终版盘点:八档覆盖矩阵完成 ✅(系列收官)

    本 issue 从 #303 的顶刊图社覆盖分析出发,经 Python/Julia 生态系统调研,最终落地为 Python 40 篇 / Julia 20 篇的语言专区教程体系(60 对 en/zh,全部经未修改渲染验证 + demo 目检 + en/zh 代码零漂移审计),已全部合并上线。

    交付轨迹

    连带基础设施修复(过程中发现并修复)

    边界(明确缓议)

    • bokeh 与大地图动画类按需求另议
    • Julia 体渲染需 GPU 后端(CI 无 GPU);GSEA 全流程工具、系统发育、空间组学按需求驱动

    后续新选题建议开独立 issue 并在认领时互相知会。感谢各位协作者!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions