c20_chinese_thesis 国标学位论文格式 (Thesis Special)
GB/T 7713国标 国内核心期刊 硕博学位论文
国标 GB/T 7713 学位论文标准三线图 (Chinese Thesis Standard)
严格遵循国内高校学位论文与科技期刊编排规范,配备宋体与Times New Roman双语图题与经典黑白/彩色三线轴。
🔬 矢量预览 (Vector Preview)
600 DPI Ready
格式支持: SVG, PDF, PNG (600 DPI), TIFF
📊 统计学特性 (Statistical Features)
- ✓ 单因素方差分析 (ANOVA)
- ✓ 事后多重比较 (Post-hoc Tukey)
- ✓ 均值柱状散点 + 转化率箱线图
- ✓ 双语中英文图题自动生成
🛡️ QC 质检要点 (QC Highlights)
- ✓ 宋体(中文)+Times New Roman(英文)
- ✓ 坐标刻度一律朝内
- ✓ 经典三线表轴线无顶右冗余线
- ✓ 符合高校知网查重与送审标准
🎨 顶刊色彩提取器 (Palette Extractor)Nature
Crisp sans-serif typography, clean borderless spines, high-contrast palette with soft muted secondary accents.
🛡️ 无障碍评分:AAA (Deuteranopia & Protanopia Compliant)
📋 Data Contract 数据契约规范 Strict Schema
输入数据必须完全符合下列列名与数据类型规范,方可通过自动化数据前检 (Pre-flight Validation)。
| 字段名称 (Column) | 数据类型 (Type) | 约束性 | 语义说明与值域约束 |
|---|---|---|---|
| sample_id | categorical | 必需 (Required) | 样本编号 |
| group | categorical | 必需 (Required) | 处理组别 |
| param_1 | continuous | 必需 (Required) | 测量指标一 |
| efficiency_rate | continuous | 必需 (Required) | 有效转化率 (%) |
组内最小样本量: n ≥ 3
最大允许缺失率: 0%
🐍 独立可复现 Python 绘图源码 Stand-alone Script
完全可复现的 Python 脚本,支持 CLI 参数 `--data`, `--style`, `--output-dir` 与模块化 `render()` 调用。
#!/usr/bin/env python3
"""FigureCraft Chart Engine: c20_chinese_thesis (国标 GB/T 7713 学位论文标准三线图)."""
import os
import sys
import argparse
from pathlib import Path
from typing import List, Dict, Optional
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
try:
from engines.styles import apply_style, get_palette
except ImportError:
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
from engines.styles import apply_style, get_palette
CHART_ID = "c20_chinese_thesis"
def render(
data_path: Optional[str] = None,
style: str = "thesis_cn",
output_dir: str = "output",
formats: Optional[List[str]] = None,
dpi: int = 600,
) -> Dict[str, str]:
if formats is None:
formats = ["svg", "pdf", "png", "tiff"]
apply_style(style)
palette = get_palette(style)
if data_path is None:
data_path = str(Path(__file__).resolve().parents[1] / "data" / f"{CHART_ID}.csv")
df = pd.read_csv(data_path)
os.makedirs(output_dir, exist_ok=True)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(7.5, 3.8), dpi=dpi)
groups = df['group'].unique()
x_pos = np.arange(len(groups))
colors = palette[:len(groups)]
means1 = [df[df['group'] == g]['param_1'].mean() for g in groups]
sems1 = [stats.sem(df[df['group'] == g]['param_1']) for g in groups]
ax1.bar(x_pos, means1, yerr=sems1, capsize=3.5, color=colors, alpha=0.85, edgecolor='#222222', lw=0.6, width=0.5)
for idx, g in enumerate(groups):
vals = df[df['group'] == g]['param_1'].values
jitter = np.random.normal(0, 0.04, size=len(vals))
ax1.scatter(idx + jitter, vals, color='#111111', s=14, alpha=0.6, zorder=3)
ax1.set_xticks(x_pos)
ax1.set_xticklabels([g.split('(')[0] for g in groups], fontsize=8.0)
ax1.set_ylabel('测量指标一 (均值 ± SEM)', fontsize=8.5, fontweight='semibold')
ax1.set_title('(a) 各处理组物理测量指标对比', fontsize=9.0, fontweight='bold', pad=6)
box_data = [df[df['group'] == g]['efficiency_rate'].values for g in groups]
bp = ax2.boxplot(box_data, positions=x_pos, widths=0.4, patch_artist=True,
medianprops=dict(color='white', lw=1.2),
whiskerprops=dict(color='#222222', lw=0.6),
capprops=dict(color='#222222', lw=0.6))
for patch, col in zip(bp['boxes'], colors):
patch.set_facecolor(col)
patch.set_alpha(0.85)
patch.set_edgecolor('#222222')
ax2.set_xticks(x_pos)
ax2.set_xticklabels([g.split('(')[0] for g in groups], fontsize=8.0)
ax2.set_ylabel('有效转化率 (%)', fontsize=8.5, fontweight='semibold')
ax2.set_title('(b) 综合有效转化率分布', fontsize=9.0, fontweight='bold', pad=6)
fig.text(0.5, -0.06, '图 4-2 实验样本各处理组核心指标与转化效率对比分析\nFigure 4-2 Comparative analysis of core parameters and efficiency rates across treatment groups',
ha='center', va='top', fontsize=8.5, fontweight='normal')
plt.tight_layout()
out_paths = {}
base_name = f"{CHART_ID}_{style}"
for fmt in formats:
p = os.path.join(output_dir, f"{base_name}.{fmt}")
fig.savefig(p, format=fmt, dpi=dpi, bbox_inches='tight')
out_paths[fmt] = p
plt.close(fig)
return out_paths
def main():
parser = argparse.ArgumentParser(description="Render Chinese Thesis Standard Figure")
parser.add_argument("--data", type=str, default=None)
parser.add_argument("--style", type=str, default="thesis_cn")
parser.add_argument("--output-dir", type=str, default="output")
parser.add_argument("--formats", type=str, default="svg,pdf,png,tiff")
parser.add_argument("--dpi", type=int, default=600)
args = parser.parse_args()
fmts = [f.strip() for f in args.formats.split(",")]
render(args.data, args.style, args.output_dir, fmts, args.dpi)
if __name__ == "__main__":
main()