返回Skills库

科学可视化

MIT
📊 数据知识
K-Dense-AI可视化

出版级图表的元技能。当创建需要多面板布局、显著性注释、误差条、盲人友好调色板和特定期刊格式(Nature、Science、Cell)的期刊投稿图表时使用。用出版样式协调matplotlib/seaborn/plotly。快速探索可直接使用seaborn或plotly。

科学可视化

概述

科学可视化将数据转化为清晰、准确的图表用于发表。创建具有多面板布局、误差条、显著性标记和色盲友好调色板的期刊级图表。使用matplotlib、seaborn和plotly以PDF/EPS/TIFF格式导出用于手稿。

何时使用此技能

当以下情况时应使用此技能:

  • 为科学手稿创建图表或可视化
  • 准备用于期刊投稿的图表(Nature、Science、Cell、PLOS等)
  • 确保图表对色盲友好且可访问
  • 制作具有一致样式的多面板图表
  • 以正确的分辨率和格式导出图表
  • 遵循特定的出版指南
  • 改进现有图表以满足出版标准
  • 创建需要在彩色和灰度下都能正常显示的图表

快速入门指南

基本出版质量图表

import matplotlib.pyplot as plt
import numpy as np

# 应用出版样式(来自scripts/style_presets.py)
from style_presets import apply_publication_style
apply_publication_style('default')

# 创建适当大小的图表(单列 = 3.5英寸)
fig, ax = plt.subplots(figsize=(3.5, 2.5))

# 绘制数据
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')

# 正确标注单位
ax.set_xlabel('时间 (秒)')
ax.set_ylabel('振幅 (mV)')
ax.legend(frameon=False)

# 移除不必要的边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# 以出版格式保存(来自scripts/figure_export.py)
from figure_export import save_publication_figure
save_publication_figure(fig, 'figure1', formats=['pdf', 'png'], dpi=300)

使用预配置样式

使用assets/中的matplotlib样式文件应用期刊特定样式:

import matplotlib.pyplot as plt

# 选项1:直接使用样式文件
plt.style.use('assets/nature.mplstyle')

# 选项2:使用style_presets.py辅助函数
from style_presets import configure_for_journal
configure_for_journal('nature', figure_width='single')

# 现在创建图表 - 它们将自动匹配Nature规范
fig, ax = plt.subplots()
# ... 你的绘图代码 ...

使用Seaborn快速入门

对于统计图表,使用带有出版样式的seaborn:

import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style

# 应用出版样式
apply_publication_style('default')
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')

# 创建统计比较图表
fig, ax = plt.subplots(figsize=(3.5, 3))
sns.boxplot(data=df, x='treatment', y='response', 
            order=['Control', 'Low', 'High'], palette='Set2', ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
              order=['Control', 'Low', 'High'], 
              color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('响应 (μM)')
sns.despine()

# 保存图表
from figure_export import save_publication_figure
save_publication_figure(fig, 'treatment_comparison', formats=['pdf', 'png'], dpi=300)

核心原则和最佳实践

1. 分辨率和文件格式

关键要求(详见references/publication_guidelines.md):

  • 栅格图像(照片、显微镜):300-600 DPI
  • 线条艺术(图表、绘图):600-1200 DPI或矢量格式
  • 矢量格式(首选):PDF、EPS、SVG
  • 栅格格式:TIFF、PNG(科学数据绝不要使用JPEG)

实现:

# 使用figure_export.py脚本获取正确设置
from figure_export import save_publication_figure

# 以适当的DPI保存为多种格式
save_publication_figure(fig, 'myfigure', formats=['pdf', 'png'], dpi=300)

# 或根据特定期刊要求保存
from figure_export import save_for_journal
save_for_journal(fig, 'figure1', journal='nature', figure_type='combination')

2. 颜色选择 - 色盲可访问性

始终使用色盲友好的调色板(详见references/color_palettes.md):

推荐:Okabe-Ito调色板(所有类型的色盲都可区分):

# 选项1:使用assets/color_palettes.py
from color_palettes import OKABE_ITO_LIST, apply_palette
apply_palette('okabe_ito')

# 选项2:手动指定
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
             '#0072B2', '#D55E00', '#CC79A7', '#000000']
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=okabe_ito)

对于热图/连续数据:

  • 使用感知均匀的颜色映射:viridisplasmacividis
  • 避免红绿发散映射(改用PuOrRdBuBrBG
  • 绝不要使用jetrainbow颜色映射

始终在灰度下测试图表以确保可解释性。

3. 排版和文本

字体指南(详见references/publication_guidelines.md):

  • 无衬线字体:Arial、Helvetica、Calibri
  • 最终打印尺寸的最小大小:
  • 轴标签:7-9 pt
  • 刻度标签:6-8 pt
  • 面板标签:8-12 pt(粗体)
  • 标签使用句子大小写:"Time (hours)" 而不是 "TIME (HOURS)"
  • 始终在括号中包含单位

实现:

# 全局设置字体
import matplotlib as mpl
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
mpl.rcParams['font.size'] = 8
mpl.rcParams['axes.labelsize'] = 9
mpl.rcParams['xtick.labelsize'] = 7
mpl.rcParams['ytick.labelsize'] = 7

4. 图表尺寸

期刊特定宽度(详见references/journal_requirements.md):

  • Nature:单列89 mm,双列183 mm
  • Science:单列55 mm,双列175 mm
  • Cell:单列85 mm,双列178 mm

检查图表尺寸合规性:

from figure_export import check_figure_size

fig = plt.figure(figsize=(3.5, 3))  # Nature的89 mm
check_figure_size(fig, journal='nature')

5. 多面板图表

最佳实践:

  • 用粗体字母标记面板:ABC(大多数期刊使用大写,Nature使用小写)
  • 保持所有面板样式一致
  • 尽可能沿边缘对齐面板
  • 在面板之间使用足够的空白

示例实现(完整代码见references/matplotlib_examples.md):

from string import ascii_uppercase

fig = plt.figure(figsize=(7, 4))
gs = fig.add_gridspec(2, 2, hspace=0.4, wspace=0.4)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
# ... 创建其他面板 ...

# 添加面板标签
for i, ax in enumerate([ax1, ax2, ...]):
    ax.text(-0.15, 1.05, ascii_uppercase[i], transform=ax.transAxes,
            fontsize=10, fontweight='bold', va='top')

常见任务

任务1:创建可发表的折线图

完整代码见references/matplotlib_examples.md示例1。

关键步骤:

  1. 应用出版样式
  2. 为目标期刊设置适当的图表大小
  3. 使用色盲友好的颜色
  4. 添加具有正确表示的误差条(SEM、SD或CI)
  5. 为轴添加单位标签
  6. 移除不必要的边框
  7. 以矢量格式保存

使用seaborn自动计算置信区间:

import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
             hue='treatment', errorbar=('ci', 95), 
             markers=True, ax=ax)
ax.set_xlabel('时间 (小时)')
ax.set_ylabel('测量值 (AU)')
sns.despine()

任务2:创建多面板图表

完整代码见references/matplotlib_examples.md示例2。

关键步骤:

  1. 使用GridSpec进行灵活布局
  2. 确保面板间样式一致
  3. 添加粗体面板标签(A、B、C等)
  4. 对齐相关面板
  5. 验证最终尺寸下所有文本可读

任务3:创建具有适当颜色映射的热图

完整代码见references/matplotlib_examples.md示例4。

关键步骤:

  1. 使用感知均匀的颜色映射(viridisplasmacividis
  2. 包含带标签的颜色条
  3. 对于发散数据,使用色盲友好的发散映射(RdBu_rPuOr
  4. 为发散映射设置适当的中心值
  5. 测试灰度外观

使用seaborn创建相关矩阵:

import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='RdBu_r', center=0, square=True,
            linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)

任务4:为特定期刊准备图表

工作流程:

  1. 检查期刊要求:references/journal_requirements.md
  2. 为期刊配置matplotlib:
   from style_presets import configure_for_journal
   configure_for_journal('nature', figure_width='single')
  1. 创建图表(将自动正确调整大小)
  2. 按期刊规范导出:
   from figure_export import save_for_journal
   save_for_journal(fig, 'figure1', journal='nature', figure_type='line_art')

任务5:修复现有图表以满足出版标准

清单方法(完整清单见references/publication_guidelines.md):

  1. 检查分辨率:验证DPI是否满足期刊要求
  2. 检查文件格式:使用矢量格式绘制图表,使用TIFF/PNG格式处理图像
  3. 检查颜色:确保对色盲友好
  4. 检查字体:最终尺寸下最小6-7 pt,无衬线
  5. 检查标签:所有轴都有单位标签
  6. 检查尺寸:符合期刊列宽
  7. 测试灰度:图表在没有颜色的情况下可解释
  8. 移除图表垃圾:无不必要的网格、3D效果、阴影

任务6:创建色盲友好的可视化

策略:

  1. 使用assets/color_palettes.py中的批准调色板
  2. 添加冗余编码(线条样式、标记、图案)
  3. 用色盲模拟器测试
  4. 确保灰度兼容性

示例:

from color_palettes import apply_palette
import matplotlib.pyplot as plt

apply_palette('okabe_ito')

# 添加超越颜色的冗余编码
line_styles = ['-', '--', '-.', ':']
markers = ['o', 's', '^', 'v']

for i, (data, label) in enumerate(datasets):
    plt.plot(x, data, linestyle=line_styles[i % 4],
             marker=markers[i % 4], label=label)

统计严谨性

始终包含:

  • 误差条(SD、SEM或CI - 在说明中指定)
  • 样本大小(n)在图表或说明中
  • 统计显著性标记(*、*)
  • 尽可能包含单个数据点(不仅仅是汇总统计)

带有统计信息的示例:

# 显示单个点和汇总统计
ax.scatter(x_jittered, individual_points, alpha=0.4, s=8)
ax.errorbar(x, means, yerr=sems, fmt='o', capsize=3)

# 标记显著性
ax.text(1.5, max_y * 1.1, '***', ha='center', fontsize=8)

使用不同的绘图库

Matplotlib

  • 对出版细节的控制最多
  • 最适合复杂的多面板图表
  • 使用提供的样式文件保持一致的格式
  • 详见references/matplotlib_examples.md获取丰富示例

Seaborn

Seaborn提供了一个高级的、面向数据集的统计图形界面,构建在matplotlib之上。它擅长用最少的代码创建可发表的统计可视化,同时保持与matplotlib定制的完全兼容性。

科学可视化的主要优势:

  • 自动统计估计和置信区间
  • 内置对多面板图表的支持(分面)
  • 默认使用色盲友好的调色板
  • 使用pandas DataFrames的面向数据集API
  • 变量到视觉属性的语义映射

带出版样式的快速入门

始终先应用matplotlib出版样式,然后配置seaborn:

import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style

# 应用出版样式
apply_publication_style('default')

# 配置seaborn用于出版
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')  # 使用色盲友好的调色板

# 创建图表
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='time', y='response', 
                hue='treatment', style='condition', ax=ax)
sns.despine()  # 移除顶部和右侧边框

出版物常见图表类型

统计比较:

# 带单个点的箱线图以提高透明度
fig, ax = plt.subplots(figsize=(3.5, 3))
sns.boxplot(data=df, x='treatment', y='response', 
            order=['Control', 'Low', 'High'], palette='Set2', ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
              order=['Control', 'Low', 'High'], 
              color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('响应 (μM)')
sns.despine()

分布分析:

# 带分割比较的小提琴图
fig, ax = plt.subplots(figsize=(4, 3))
sns.violinplot(data=df, x='timepoint', y='expression',
               hue='treatment', split=True, inner='quartile', ax=ax)
ax.set_ylabel('基因表达 (AU)')
sns.despine()

相关矩阵:

# 带适当颜色映射和注释的热图
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))  # 仅显示下三角
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='RdBu_r', center=0, square=True,
            linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)
plt.tight_layout()

带置信带的时间序列:

# 带自动CI计算的折线图
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
             hue='treatment', style='replicate',
             errorbar=('ci', 95), markers=True, dashes=False, ax=ax)
ax.set_xlabel('时间 (小时)')
ax.set_ylabel('测量值 (AU)')
sns.despine()

使用Seaborn创建多面板图表

使用FacetGrid进行自动分面:

# 创建分面图
g = sns.relplot(data=df, x='dose', y='response',
                hue='treatment', col='cell_line', row='timepoint',
                kind='line', height=2.5, aspect=1.2,
                errorbar=('ci', 95), markers=True)
g.set_axis_labels('剂量 (μM)', '响应 (AU)')
g.set_titles('{row_name} | {col_name}')
sns.despine()

# 以正确的DPI保存
from figure_export import save_publication_figure
save_publication_figure(g.figure, 'figure_facets', 
                       formats=['pdf', 'png'], dpi=300)

将seaborn与matplotlib子图结合:

# 创建自定义多面板布局
fig, axes = plt.subplots(2, 2, figsize=(7, 6))

# 面板A:带回归的散点图
sns.regplot(data=df, x='predictor', y='response', ax=axes[0, 0])
axes[0, 0].text(-0.15, 1.05, 'A', transform=axes[0, 0].transAxes,
                fontsize=10, fontweight='bold')

# 面板B:分布比较
sns.violinplot(data=df, x='group', y='value', ax=axes[0, 1])
axes[0, 1].text(-0.15, 1.05, 'B', transform=axes[0, 1].transAxes,
                fontsize=10, fontweight='bold')

# 面板C:热图
sns.heatmap(correlation_data, cmap='viridis', ax=axes[1, 0])
axes[1, 0].text(-0.15, 1.05, 'C', transform=axes[1, 0].transAxes,
                fontsize=10, fontweight='bold')

# 面板D:时间序列
sns.lineplot(data=timeseries, x='time', y='signal', 
             hue='condition', ax=axes[1, 1])
axes[1, 1].text(-0.15, 1.05, 'D', transform=axes[1, 1].transAxes,
                fontsize=10, fontweight='bold')

plt.tight_layout()
sns.despine()

出版物调色板

Seaborn包含多个色盲友好的调色板:

# 使用内置的色盲调色板(推荐)
sns.set_palette('colorblind')

# 或指定自定义色盲友好颜色(Okabe-Ito)
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
             '#0072B2', '#D55E00', '#CC79A7', '#000000']
sns.set_palette(okabe_ito)

# 对于热图和连续数据
sns.heatmap(data, cmap='viridis')  # 感知均匀
sns.heatmap(corr, cmap='RdBu_r', center=0)  # 发散,居中

在轴级和图级函数之间选择

轴级函数(例如scatterplotboxplotheatmap):

  • 构建自定义多面板布局时使用
  • 接受ax=参数进行精确定位
  • 与matplotlib子图更好集成
  • 对图表组合有更多控制
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='x', y='y', hue='group', ax=ax)

图级函数(例如relplotcatplotdisplot):

  • 用于按分类变量自动分面
  • 创建具有一致样式的完整图表
  • 非常适合探索性分析
  • 使用heightaspect进行大小调整
g = sns.relplot(data=df, x='x', y='y', col='category', kind='scatter')

使用Seaborn的统计严谨性

Seaborn自动计算并显示不确定性:

# 折线图:默认显示均值 ± 95% CI
sns.lineplot(data=df, x='time', y='value', hue='treatment',
             errorbar=('ci', 95))  # 可更改为'sd'、'se'等

# 条形图:显示均值和自举CI
sns.barplot(data=df, x='treatment', y='response',
            errorbar=('ci', 95), capsize=0.1)

# 始终在图表说明中指定误差类型:
# "误差条表示95%置信区间"

出版就绪Seaborn图表的最佳实践

  1. 始终先设置出版主题:
   sns.set_theme(style='ticks', context='paper', font_scale=1.1)
  1. 使用色盲友好的调色板:
   sns.set_palette('colorblind')
  1. 移除不必要的元素:
   sns.despine()  # 移除顶部和右侧边框
  1. 适当控制图表大小:
   # 轴级:使用matplotlib figsize
   fig, ax = plt.subplots(figsize=(3.5, 2.5))
   
   # 图级:使用height和aspect
   g = sns.relplot(..., height=3, aspect=1.2)
  1. 尽可能显示单个数据点:
   sns.boxplot(...)  # 汇总统计
   sns.stripplot(..., alpha=0.3)  # 单个点
  1. 包含带单位的适当标签:
   ax.set_xlabel('时间 (小时)')
   ax.set_ylabel('表达 (AU)')
  1. 以正确的分辨率导出:
   from figure_export import save_publication_figure
   save_publication_figure(fig, 'figure_name', 
                          formats=['pdf', 'png'], dpi=300)

高级Seaborn技术

用于探索性分析的成对关系:

# 所有关系的快速概览
g = sns.pairplot(data=df, hue='condition', 
                 vars=['gene1', 'gene2', 'gene3'],
                 corner=True, diag_kind='kde', height=2)

层次聚类热图:

# 对样本和特征进行聚类
g = sns.clustermap(expression_data, method='ward', 
                   metric='euclidean', z_score=0,
                   cmap='RdBu_r', center=0, 
                   figsize=(10, 8), 
                   row_colors=condition_colors,
                   cbar_kws={'label': 'Z-score'})

带边际分布的联合分布:

# 带上下文的双变量分布
g = sns.jointplot(data=df, x='gene1', y='gene2',
                  hue='treatment', kind='scatter',
                  height=6, ratio=4, marginal_kws={'kde': True})

常见Seaborn问题和解决方案

问题:图例超出绘图区域

g = sns.relplot(...)
g._legend.set_bbox_to_anchor((0.9, 0.5))

问题:标签重叠

plt.xticks(rotation=45, ha='right')
plt.tight_layout()

问题:最终尺寸下文本太小

sns.set_context('paper', font_scale=1.2)  # 如需增加

其他资源

有关seaborn的更多详细信息,请参阅:

  • scientific-skills/seaborn/SKILL.md - 全面的seaborn文档
  • scientific-skills/seaborn/references/examples.md - 实用用例
  • scientific-skills/seaborn/references/function_reference.md - 完整API参考
  • scientific-skills/seaborn/references/objects_interface.md - 现代声明式API

Plotly

  • 用于探索的交互式图表
  • 导出静态图像用于发表
  • 配置为出版质量:
fig.update_layout(
    font=dict(family='Arial, sans-serif', size=10),
    plot_bgcolor='white',
    # ... 见matplotlib_examples.md示例8
)
fig.write_image('figure.png', scale=3)  # scale=3 约为300 DPI

资源

参考目录

根据需要加载这些以获取详细信息:

  • `publication_guidelines.md`:全面的最佳实践
  • 分辨率和文件格式要求
  • 排版指南
  • 布局和构图规则
  • 统计严谨性要求
  • 完整的出版清单
  • `color_palettes.md`:颜色使用指南
  • 色盲友好调色板规范及RGB值
  • 序列和发散颜色映射建议
  • 可访问性测试程序
  • 特定领域调色板(基因组学、显微镜)
  • `journal_requirements.md`:期刊特定规范
  • 出版商的技术要求
  • 文件格式和DPI规范
  • 图表尺寸要求
  • 快速参考表
  • `matplotlib_examples.md`:实用代码示例
  • 10个完整的工作示例
  • 折线图、条形图、热图、多面板图表
  • 期刊特定图表示例
  • 每个库的提示(matplotlib、seaborn、plotly)

脚本目录

使用这些辅助脚本进行自动化:

  • `figure_export.py`:导出工具
  • save_publication_figure():以正确的DPI保存为多种格式
  • save_for_journal():自动使用期刊特定要求
  • check_figure_size():验证尺寸是否满足期刊规范
  • 直接运行:python scripts/figure_export.py查看示例
  • `style_presets.py`:预配置样式
  • apply_publication_style():应用预设样式(默认、nature、science、cell)
  • set_color_palette():快速调色板切换
  • configure_for_journal():一键式期刊配置
  • 直接运行:python scripts/style_presets.py查看示例

资产目录

在图表中使用这些文件:

  • `color_palettes.py`:可导入的颜色定义
  • 所有推荐调色板作为Python常量
  • apply_palette()辅助函数
  • 可直接导入到笔记本/脚本中
  • Matplotlib样式文件:与plt.style.use()一起使用
  • publication.mplstyle:一般出版质量
  • nature.mplstyle:Nature期刊规范
  • presentation.mplstyle:用于海报/幻灯片的更大字体

工作流程摘要

创建出版图表的推荐工作流程:

  1. 计划:确定目标期刊、图表类型和内容
  2. 配置:为期刊应用适当的样式
   from style_presets import configure_for_journal
   configure_for_journal('nature', 'single')
  1. 创建:构建具有适当标签、颜色和统计信息的图表
  2. 验证:检查尺寸、字体、颜色、可访问性
   from figure_export import check_figure_size
   check_figure_size(fig, journal='nature')
  1. 导出:以所需格式保存
   from figure_export import save_for_journal
   save_for_journal(fig, 'figure1', 'nature', 'combination')
  1. 审查:在 manuscript 上下文中查看最终尺寸

应避免的常见陷阱

  1. 字体太小:最终打印尺寸下文本不可读
  2. JPEG格式:绝不要使用JPEG用于图表/绘图(会产生伪影)
  3. 红绿颜色:约8%的男性无法区分
  4. 低分辨率:出版物中的像素化图表
  5. 缺少单位:始终为轴添加单位标签
  6. 3D效果:扭曲感知,完全避免
  7. 图表垃圾:移除不必要的网格线、装饰
  8. 截断轴:条形图从零点开始,除非有科学依据
  9. 样式不一致:同一手稿中不同图表的字体/颜色不同
  10. 无误差条:始终显示不确定性

最终清单

在提交图表之前,验证:

  • [ ] 分辨率满足期刊要求(300+ DPI)
  • [ ] 文件格式正确(图表使用矢量格式,图像使用TIFF)
  • [ ] 图表尺寸符合期刊规范
  • [ ] 所有文本在最终尺寸下可读(≥6 pt)
  • [ ] 颜色对色盲友好
  • [ ] 图表在灰度下可工作
  • [ ] 所有轴都有单位标签
  • [ ] 存在误差条并在说明中定义
  • [ ] 面板标签存在且一致
  • [ ] 无图表垃圾或3D效果
  • [ ] 所有图表字体一致
  • [ ] 统计显著性标记清晰
  • [ ] 图例清晰完整

使用此技能确保科学图表符合最高出版标准,同时对所有读者保持可访问性。

兼容工具

Claude CodeOpenClawHermes Agent

数据来源:claude-scientific-skillsMIT 许可) | 查看上游来源

上游项目:K-Dense-AI/scientific-agent-skills / claude-scientific-skills | 收录时间:2026-08-18 | 更新:2026-08-18

本页面内容基于上游开源许可项目整理,仅供学习参考。AI铺子不对第三方内容承担责任, 详情请参阅免责声明