🎨 SciPlot Academic
中文科研绘图默认方案 — 为论文、汇报和竞赛而生的专业级可视化库
✨ 效果展示
基础图表
|
多线对比图 |
分组柱状图 |
散点回归图 |
统计图表
|
小提琴图 |
热力图 |
时间序列图 |
高级图表
|
雷达图 |
核密度图 |
PCA 降维可视化 |
扩展模块
|
3D 曲面图 |
网络社区图 |
多面板组合图 |
进阶图表
|
气泡热力图 |
3D 瀑布图 |
二维气泡图 |
|
山脊图 |
六边形密度图 |
边际分布图 |
|
雨云图 |
蜂群图 |
哑铃图 |
|
甘特图 |
打包气泡图 |
3D 网络图 |
|
火山图 |
日历热图 |
泰勒图 |
|
弦图 |
三角相图 |
华夫图 |
🌟 为什么选择 SciPlot?
┌─────────────────────────────────────────────────────────────────────────┐
│ SciPlot Academic = 专业配色 + 期刊样式 + 中文优化 + 智能辅助 │
└─────────────────────────────────────────────────────────────────────────┘
| 特性 | 说明 |
|---|---|
| 🎨 全内置配色 | 5 大基础色系 + 6 个人民币主题 + 2 个发散配色,零外部依赖 |
| 🀄 中文优化 | 默认宋体中文环境,IEEE 中文字号自动调优 |
| 📄 论文级输出 | Nature/IEEE/APS/Springer/Thesis 预置尺寸,Word/LaTeX 一键切换 |
| 🧠 智能配色 | ≤6 条线自动选择最优子集,支持自定义配色方案 |
| 📊 丰富图表 | 35+ 图表类型:折线/散点/柱状/箱线/小提琴/热力/气泡热力/气泡/山脊/六边形/瀑布/雷达/网络/3D 等 |
| ✨ 智能辅助 | 自动标签旋转、智能图例、布局优化、颜色对比度检查、标注自动对比色 |
| 🔌 扩展模块 | ML 可视化(PCA/混淆矩阵)+ 3D 可视化(曲面/等高线/散点/瀑布) |
| 🚀 增强 API | PlotResult 链式调用、语法糖别名、上下文管理器 |
| 🌙 暗色主题 | theme="dark" 一键切换深色背景,适合演示与屏幕展示 |
| ⚙️ 配置系统 | set_defaults() 持久化默认值,setup_style() 自动读取 |
📦 安装
# 基础安装(uv 推荐)
uv pip install sciplot-academic
# 机器学习扩展
uv pip install sciplot-academic[ml]
# 统计图表扩展(Q-Q 图、Bland-Altman、核密度等)
uv pip install sciplot-academic[stats]
# 全部扩展(ML + 统计 + 网络 + 维恩图)
uv pip install sciplot-academic[all]
扩展模块导入
# 机器学习可视化
from sciplot._ext.ml import plot_pca, plot_confusion_matrix, plot_learning_curve
# 3D 可视化
from sciplot._ext.plot3d import plot_surface, plot_contour, plot_3d_scatter
⚡ 快速上手
5 种 API 风格,满足所有场景
import sciplot as sp
import numpy as np
x = np.linspace(0, 10, 200)
# ─────────────────────────────────────────────────────────────────────
# 风格 1: 传统 API(推荐用于复杂图表)
# ─────────────────────────────────────────────────────────────────────
fig, ax = sp.plot(x, np.sin(x), xlabel="时间 (s)", ylabel="电压 (V)")
sp.save(fig, "结果图")
# ─────────────────────────────────────────────────────────────────────
# 风格 2: 链式调用(推荐用于快速绘图)
# ─────────────────────────────────────────────────────────────────────
sp.style("nature").palette("pastel").plot(x, np.sin(x)).save("链式调用")
# ─────────────────────────────────────────────────────────────────────
# 风格 3: 简洁别名(推荐用于简单图表)
# ─────────────────────────────────────────────────────────────────────
sp.line(x, np.sin(x), xlabel="时间 (s)", ylabel="电压 (V)")
# ─────────────────────────────────────────────────────────────────────
# 风格 4: PlotResult 增强返回类型(推荐用于复杂链式操作)
# ─────────────────────────────────────────────────────────────────────
result = sp.PlotResult(*sp.plot(x, np.sin(x)))
result.xlabel("时间 (s)").ylabel("电压 (V)").save("PlotResult 示例")
# ─────────────────────────────────────────────────────────────────────
# 风格 5: 上下文管理器(推荐用于临时样式切换)
# ─────────────────────────────────────────────────────────────────────
with sp.style_context("ieee", palette="forest"):
fig, ax = sp.plot(x, np.sin(x))
sp.save(fig, "ieee_fig")
# ─────────────────────────────────────────────────────────────────────
# 风格 6: 暗色主题(演示/屏幕展示)
# ─────────────────────────────────────────────────────────────────────
with sp.style_context("presentation", theme="dark"):
fig, ax = sp.plot(x, np.sin(x), xlabel="时间", ylabel="幅度")
sp.save(fig, "dark_fig")
📊 图表类型总览
基础图表
| 函数 | 用途 | 别名 |
|---|---|---|
plot() / plot_line() |
折线图 | line() |
plot_multi() |
多线对比(自动配色) | multi() |
plot_scatter() |
散点图 | scatter() |
plot_step() |
阶梯图(CDF/直方) | step() |
plot_area() |
面积图 | area() |
柱状图家族
| 函数 | 用途 | 别名 |
|---|---|---|
plot_bar() |
单组柱状图 | bar() |
plot_grouped_bar() |
分组柱状图(论文最常用) | grouped_bar() |
plot_stacked_bar() |
堆叠柱状图 | stacked_bar() |
plot_horizontal_bar() |
水平柱状图 | hbar() |
plot_lollipop() |
棒棒糖图(排名/重要性) | lollipop() |
plot_combo() |
组合图(柱状 + 折线,双 Y 轴) | combo() |
分布图表
| 函数 | 用途 | 别名 |
|---|---|---|
plot_box() |
箱线图 | box() |
plot_violin() |
小提琴图 | violin() |
plot_histogram() |
直方图 | hist() |
plot_heatmap() |
热力图 | heatmap() |
误差与置信
| 函数 | 用途 | 别名 |
|---|---|---|
plot_errorbar() |
误差条 | errorbar() |
plot_confidence() |
置信区间 | confidence() |
时间序列
| 函数 | 用途 | 别名 |
|---|---|---|
plot_timeseries() |
时间序列图 | timeseries() |
plot_multi_timeseries() |
多条时序曲线 | multi_timeseries() |
plot_slope() |
斜率图 | — |
统计诊断
| 函数 | 用途 | 别名 |
|---|---|---|
plot_residuals() |
残差图(模型诊断) | residuals() |
plot_qq() |
Q-Q 图(正态性检验) | qq() |
plot_bland_altman() |
Bland-Altman 图(一致性分析) | bland_altman() |
plot_density() |
核密度估计曲线 | density() |
plot_multi_density() |
多组核密度对比 | multi_density() |
多维/进阶图表
| 函数 | 用途 | 别名 |
|---|---|---|
plot_radar() |
雷达图 | radar() |
plot_parallel() |
平行坐标图 | — |
plot_scatter_matrix() |
散点矩阵图 | — |
plot_residuals() |
残差图 | — |
plot_qq() |
Q-Q 图 | — |
网络与层次
| 函数 | 用途 |
|---|---|
plot_network() |
网络图 |
plot_dendrogram() |
层次聚类树状图 |
plot_venn2() / plot_venn3() |
维恩图 |
标注工具
| 函数 | 用途 |
|---|---|
annotate_significance() |
显著性标注(//) |
add_panel_labels() |
添加 (a)(b)(c) 面板标签 |
🎨 配色系统
内置色系总览
┌─────────────────────────────────────────────────────────────────────┐
│ pastel → 柔和粉彩(默认,6 色) │
│ ocean → 海洋蓝绿(6 色) │
│ forest → 森林渐变(6 色) │
│ sunset → 日落暖色(5 色) │
│ earth → 大地色系(5 色) │
│ rmb → 人民币配色(6 个面额主题) │
│ diverging → 发散配色(rdbu / coolwarm) │
└─────────────────────────────────────────────────────────────────────┘
自定义配色
# 简单配色
sp.set_custom_palette(["#E74C3C", "#3498DB"])
# 完整配色方案注册
sp.register_color_scheme("mytheme", scheme)
📐 期刊样式
| venue | 尺寸 (英寸) | 适用场景 |
|---|---|---|
nature |
7.0 × 5.0 | Nature/Science 双栏 |
ieee |
3.5 × 3.0 | IEEE 单栏 |
aps |
3.4 × 2.8 | APS Physical Review |
springer |
6.0 × 4.5 | Springer 期刊 |
thesis |
6.1 × 4.3 | 学位论文 |
presentation |
8.0 × 5.5 | 16:9 演示文稿 |
🔧 高级功能
分组柱状图(论文最常见)
sp.plot_grouped_bar(
groups=["A", "B", "C"],
data={"方法 1": [1, 2, 3], "方法 2": [2, 3, 4]}
)
堆叠柱状图
sp.plot_stacked_bar(
categories=["A", "B", "C"],
data={"训练": [80, 85, 90], "验证": [10, 8, 5]}
)
组合图(柱状 + 折线,双 Y 轴)
sp.plot_combo(
x=["Q1", "Q2", "Q3"],
bar_data={"销量": [100, 120, 140]},
line_data={"增长率": [0.1, 0.2, 0.15]}
)
显著性标注
sp.annotate_significance(ax, x1=1, x2=2, y=8.5, p_value=0.03) # *
智能辅助工具
sp.auto_rotate_labels(ax) # 自动旋转标签避免重叠
sp.smart_legend(ax, outside=True) # 智能图例位置
sp.optimize_layout(fig) # 自动优化布局
sp.check_color_contrast("#FFF", "#000") # 颜色对比度检查
🤖 AI Agent 集成
默认触发规则
⚠️ 重要提示:本项目附带 sciplot skill(
.claude/skills/sciplot/),这是默认绘图入口。只要用户在对话里提到画图、出图、可视化、图表、figure、plot、matplotlib、seaborn、plotly、论文插图、竞赛图或实验结果展示,就先走这个 skill。只有当用户明确要求不用 SciPlot,或需求明显超出本包能力时,才退回通用方案。
使用 SciPlot 技能时,请参考 .claude/skills/sciplot/SKILL.md。该文件包含完整的函数签名、场景选型速查和最佳实践规范。
GitHub Copilot 的仓库级提示见
.github/copilot-instructions.md。
标准代码结构
"""
科研绘图脚本
依赖:uv pip install sciplot-academic
运行:python plot_result.py
"""
import numpy as np
import sciplot as sp
# 数据准备
x = np.linspace(0, 10, 200)
y1, y2 = np.sin(x), np.cos(x)
# 绘图
sp.setup_style("thesis", "pastel-2", lang="zh")
fig, ax = sp.plot(x, y1, xlabel="时间 (s)", ylabel="幅度")
sp.save(fig, "结果", formats=("png",), dpi=1200)
print("✓ 已保存")
🎯 最佳实践
黄金法则
┌─────────────────────────────────────────────────────────────────────┐
│ 1. Word 用 PNG 1200 DPI,LaTeX 用 PDF │
│ 2. 多子图用 paper_subplots() 锁定总宽 │
│ 3. 中文用 lang="zh",英文用 lang="en" │
│ 4. ≥4 条线用 use_linestyles=True(色盲友好) │
│ 5. 必须生成独立可运行的 Python 脚本 │
└─────────────────────────────────────────────────────────────────────┘
场景推荐
| 用户场景 | Venue | 格式 | DPI | 语言 |
|---|---|---|---|---|
| Word 中文论文 | thesis |
PNG | 1200 | zh |
| IEEE 英文投稿 | ieee |
— | en | |
| Nature 英文投稿 | nature |
— | en | |
| 学位论文 | thesis |
PNG/PDF | 1200 | zh |
| 演示文稿 | presentation |
PNG | 300 | zh/en |
📚 完整文档
详细文档请查阅 .claude/skills/sciplot/references/ 目录:
| 文档 | 说明 |
|---|---|
| full-api.md | 完整 API 参考(全部函数签名) |
| recipes.md | 场景配方(论文/期刊/竞赛/PPT) |
| color-style.md | 配色方案与样式详解 |
🔗 相关链接
- PyPI: https://pypi.org/project/sciplot-academic/
- GitHub: https://github.com/rippleshe/sciplot-academic
- 问题反馈: https://github.com/rippleshe/sciplot-academic/issues
📄 License
MIT © SciPlot Team
Metadata
Release files for sciplot-academic 1.12.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sciplot_academic-1.12.3.tar.gz | 6.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sciplot_academic-1.12.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.3 MB
Release files / sciplot_academic-1.12.3.tar.gz
| Download URL | sciplot_academic-1.12.3.tar.gz |
|---|---|
| Size | 6.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
923219a098c434ce0961923c5e10838cf52cfe2d6f646e829623a430a549832c
|
|
BLAKE2b-256 checksum How to use checksums |
d2ab18b6faad3d99d09f0ad5be3971c6a52887867872a1a02ee2ebcfae9ef132
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / sciplot_academic-1.12.3-py3-none-any.whl
| Download URL | sciplot_academic-1.12.3-py3-none-any.whl |
|---|---|
| Size | 138.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ca1673fb2c7eaa1e433ed62256f0e276817759ca0e64ffcf8713987bbd40081d
|
|
BLAKE2b-256 checksum How to use checksums |
d8673b4fe672f2fa430cafbe16219e162ba06e14d11bc7d125148c27b80fa863
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|