Neuropixels 数据可视化实战指南:用 SpikeInterface 绘制发表级科研图表(scientific-agent-skills / neuropixels-analysis)

Neuropixels 数据可视化实战指南:用 SpikeInterface 绘制发表级科研图表(scientific-agent-skills / neuropixels-analysis) Neuropixels 数据可视化实战指南用 SpikeInterface 绘制发表级科研图表scientific-agent-skills / neuropixels-analysis【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills本篇技术指南围绕 scientific-agent-skills 仓库中 neuropixels-analysis 技能自带的 绘图指南系统讲解如何用 SpikeInterface 的 widgets 模块与 Matplotlib 为 Neuropixels 胞外记录生成从「漂移检查」到「单单元汇总」的完整可视化套件。读完本文你将掌握漂移图、波形图、质量指标分布、相关图、峰电位栅栏图、ISI 直方图等全部图型的标准调用方式以及面向论文发表的分辨率、字号、尺寸与配色设置并理解这些绘图在仓库端到端管线中的实际落地方式。1. 绘图在整个 Neuropixels 分析流程中的位置Neuropixels 高密度探针单次记录可覆盖数百通道Neuropixels 1.0 为 384 通道、2.0 单柄 384 通道原始数据无法靠肉眼直接解读。绘图能力贯穿整个分析管线而非事后装饰预处理后、排序前绘制漂移栅栏图判断是否需要进行运动校正排序前漂移超过约 10 μm 会明显劣化质量排序与后处理后绘制波形、模板、相关图、ISI 直方图判断单元分离质量质量指标计算后绘制指标分布与散点矩阵支撑阈值筛选与 good/mua/noise 分类策展阶段绘制单元汇总图供人工或 AI 辅助审阅导出到 Phy 后做最终人工核验。仓库的 end-to-end 管线 将上述流程串成了load → preprocess → drift check → motion correction → sorting → postprocess → metrics → curation → export一条命令其内部就包含绘图步骤详见 第 12 节。所有绘图均基于 SpikeInterface 真实 APIspikeinterface.full as si与spikeinterface.widgets as sw无需额外安装绘图专用包。2. 环境准备与全局绘图设置绘图脚本通常需要matplotlib、numpy以及 SpikeInterface 的核心与 widgets 模块。绘图指南推荐的初始化设置如下import matplotlib.pyplot as plt import numpy as np import spikeinterface.full as si import spikeinterface.widgets as sw # High-quality settings plt.rcParams[figure.dpi] 150 plt.rcParams[savefig.dpi] 300 plt.rcParams[font.size] 10 plt.rcParams[font.family] sans-seriffigure.dpi 150屏幕预览分辨率兼顾细节与交互流畅度savefig.dpi 300保存 PNG 时的默认输出分辨率满足大多数期刊的位图要求600 dpi 的更高规格见第 11 节导出设置font.size 10与font.family sans-serif统一正文字号与无衬线字体保证多张图之间风格一致。这些是全局基线面向具体论文排版时还可通过plt.rcParams.update({...})覆盖见第 11 节。安装依赖时仓库建议uv pip install spikeinterface[full] probeinterface neo其中[full]即包含 widgets 与绘图所需组件详见 SKILL.md 的 Installation 一节。3. 漂移与运动可视化漂移drift指神经元在探针上的空间位置随时间缓慢移动。排序前必须检查漂移因此漂移图通常是分析流程中第一张图。3.1 基础漂移栅栏图Drift Raster Map绘图前需要先做两步计算峰值检测detect_peaks与峰值定位localize_peaks分别来自spikeinterface.sortingcomponents.peak_detection与spikeinterface.sortingcomponents.peak_localizationfrom spikeinterface.sortingcomponents.peak_detection import detect_peaks from spikeinterface.sortingcomponents.peak_localization import localize_peaks noise_levels si.get_noise_levels(recording, return_in_uVFalse) peaks detect_peaks(recording, methodlocally_exclusive, noise_levelsnoise_levels, detect_threshold5, radius_um50.0) peak_locations localize_peaks(recording, peaks, methodcenter_of_mass) si.plot_drift_raster_map( peakspeaks, peak_locationspeak_locations, recordingrecording, clim(-50, 50), ) plt.savefig(drift_raster.png, bbox_inchestight)参数含义与推荐值参数含义推荐值methodlocally_exclusive局部排除式峰值检测对稠密数据更稳健默认推荐detect_threshold相对噪声水平的检测阈值倍数5radius_um排除窗口半径μm50.0methodcenter_of_mass质心法定位峰值空间位置常用默认clim(-50, 50)色彩范围μV控制栅栏图对比度按数据幅度调整get_noise_levels(recording, return_in_uVFalse)返回与原始数据相同单位的噪声水平——注意此处传False这样detect_threshold才能按信号倍数语义解释。从源码角度看这条链路在 neuropixels_pipeline.py 的check_drift()函数 中有完整实现它使用n_jobs8, chunk_duration1s, progress_barTrue的 job 参数加速峰值检测与定位并对超过 10 万个峰值做随机下采样n_plot min(100000, len(peaks))后再用ax.scatter绘制避免百万级点拖垮渲染。管线还据此估算漂移量y_positions peak_locations[y] drift_estimate np.percentile(y_positions, 95) - np.percentile(y_positions, 5)当该 5–95 分位数跨度超过 20 μm 时run_pipeline 会自动触发运动校正这一阈值逻辑正是「先看图、再定量」工程化的体现。3.2 运动估计结果可视化调用si.correct_motion(..., output_motion_infoTrue)会返回(recording, motion_info)二元组。motion_info字典可直接交给内置 widget 绘制漂移栅栏 运动场叠加rec_corrected, motion_info si.correct_motion( recording, presetnonrigid_fast_and_accurate, output_motion_infoTrue, foldermotion/ ) # Built-in motion visualization (drift raster motion field) sw.plot_motion_info(motion_info, recordingrecording) plt.savefig(motion_analysis.png, dpi300, bbox_inchestight) # Or inspect the Motion object directly motion motion_info[motion] displacement motion.displacement[0] # (n_temporal_bins, n_spatial_bins) temporal_bins motion.temporal_bins_s[0] plt.figure(figsize(10, 4)) plt.plot(temporal_bins, displacement, alpha0.5) plt.xlabel(Time (s)); plt.ylabel(Displacement (um)); plt.title(Estimated Motion) plt.savefig(motion_traces.png, dpi300, bbox_inchestight)preset的可选值与适用场景出自 SKILL.mdpreset适用场景rigid_fast快速刚性校正kilosort_like近似 Kilosort 内部行为nonrigid_accurate严重漂移nonrigid_fast_and_accurate平衡默认correct_motion未指定时默认值dredge/dredge_fast当前最先进方法motion.displacement的 shape 为(n_temporal_bins, n_spatial_bins)第一维对应时间分箱、第二维对应空间分箱配合motion.temporal_bins_s即可手工绘制「时间-位移」曲线方便嵌入自定义报告模板。4. 波形图波形是判断单元分离质量的第一手证据。所有波形类绘图都要求先对 SortingAnalyzer 计算过waveforms与templates扩展对应 standard_workflow.md 第 5 节。4.1 单单元波形unit_id 0 # Basic waveforms sw.plot_unit_waveforms(analyzer, unit_ids[unit_id]) plt.savefig(funit_{unit_id}_waveforms.png) # With density map sw.plot_unit_waveform_density_map(analyzer, unit_ids[unit_id]) plt.savefig(funit_{unit_id}_density.png)plot_unit_waveforms绘制该单元的全部或采样后的原始波形叠加plot_unit_waveform_density_map则用密度色带代替散点叠加视觉上更利于观察波形主分布与离群伪迹。4.2 多单元模板对比# Compare multiple units unit_ids [0, 1, 2, 3] sw.plot_unit_templates(analyzer, unit_idsunit_ids) plt.savefig(template_comparison.png)将多个单元的模板并排绘制用于快速排查模板相似单元此时可结合template_similarity扩展进一步量化见 standard_workflow.md 中的analyzer.compute(template_similarity)。4.3 探针上的空间波形# Show waveforms spatially on probe sw.plot_unit_waveforms_on_probe( analyzer, unit_ids[unit_id], plot_channelsTrue, ) plt.savefig(funit_{unit_id}_probe.png)把波形按其记录的电极通道位置绘制在探针几何布局上可直观看到单元在通道阵列上的空间足迹用于判断「一个神经元是否被分裂成多个模板」分裂单元通常共享相同空间足迹。5. 质量指标可视化质量指标是策展curation的量化基础。绘图前先保证指标已计算并取出 DataFrameanalyzer.compute(quality_metrics, metric_names[ firing_rate, snr, isi_violations_ratio, presence_ratio, amplitude_cutoff, amplitude_cv, ]) metrics analyzer.get_extension(quality_metrics).get_data()5.1 指标总览内置 scatter matrix# Built-in quality-metrics widget (scatter matrix of all computed metrics) sw.plot_quality_metrics(analyzer) plt.savefig(quality_overview.png, dpi300, bbox_inchestight)plot_quality_metrics是 SpikeInterface 内置的散点矩阵 widget把每个单元的所有已计算指标两两对比异常单元会立即表现为散点云中的离群点是「先全局浏览、再局部深挖」的高效起点。5.2 单指标分布直方图fig, axes plt.subplots(2, 3, figsize(12, 8)) metric_names [snr, isi_violations_ratio, presence_ratio, amplitude_cutoff, firing_rate, amplitude_cv] for ax, metric in zip(axes.flat, metric_names): if metric in metrics.columns: values metrics[metric].dropna() ax.hist(values, bins30, edgecolorblack, alpha0.7) ax.axvline(values.median(), colorred, linestyle--, labelmedian) ax.set_xlabel(metric) ax.set_ylabel(Count) ax.legend() plt.tight_layout() plt.savefig(metrics_distribution.png, dpi300)dropna()部分指标如需要 PCA 的隔离度指标在某些单元上可能缺失红色中位数参考线帮助快速判断分布偏态——例如isi_violations_ratio的中位数若普遍偏高说明排序参数可能过松。指标的含义与经验阈值可对照 QUALITY_METRICS.mdsnr 5为良好、isi_violations_ratio 0.5允许、presence_ratio 0.9良好、amplitude_cutoff 0.1良好、firing_rate 0.1 Hz良好。绘制分布时在阈值处添加参考线该文档的ax.axvline(5, ...)等做法能让阈值决策一目了然。5.3 关键指标散点矩阵pandasimport pandas as pd key_metrics [snr, isi_violations_ratio, presence_ratio, firing_rate] pd.plotting.scatter_matrix( metrics[key_metrics], figsize(10, 10), alpha0.5, diagonalhist, ) plt.savefig(metrics_scatter.png, dpi300)pd.plotting.scatter_matrix是轻量替代方案对角线为直方图、非对角线为两两散点。相比内置 widget它对「只关心少数几个关键指标」的场景更可控且不需要额外 SpikeInterface 渲染。5.4 按标签分组对比good / mua / noiselabels_series pd.Series(labels) fig, axes plt.subplots(1, 3, figsize(12, 4)) for ax, metric in zip(axes, [snr, isi_violations_ratio, presence_ratio]): for label in [good, mua, noise]: mask labels_series label if mask.any(): ax.hist(metrics.loc[mask.index[mask], metric], alpha0.5, labellabel, bins20) ax.set_xlabel(metric) ax.legend() plt.tight_layout() plt.savefig(metrics_by_label.png, dpi300)这张图用于验证策展阈值是否合理理想情况下 three 类在snr、isi_violations_ratio、presence_ratio上的分布应可区分。若good与mua在关键指标上高度重叠说明需要收紧/调整阈值。标签来源可以是 standard_workflow.md 的阈值查询结果也可以是 神经管线curate_units()中allen/ibl/strict三种预设的输出其分类逻辑先以snr 1.5判 noise再按各预设的presence_ratio、isi_violations_ratio、amplitude_cutoff、firing_rate边界分 good/mua/unsorted。6. 相关图Correlograms相关图反映单元发放的时间结构是评估「是否真的只有一个神经元」的核心工具真正的单单元在自相关图上应在 0 ms 附近存在不应期缺口。6.1 自相关图sw.plot_autocorrelograms( analyzer, unit_ids[unit_id], window_ms50, bin_ms1, ) plt.savefig(funit_{unit_id}_acg.png)window_ms50表示展示 ±50 ms 的时间窗bin_ms1表示 1 ms 分箱。仓库的排序后处理默认采用window_ms50.0, bin_ms1.0见 analysis_template.py 与 neuropixels_pipeline.py与分析模板保持一致可避免「绘图参数与计算参数不一致」的困惑。6.2 互相关图unit_pairs [(0, 1), (0, 2), (1, 2)] sw.plot_crosscorrelograms( analyzer, unit_pairsunit_pairs, window_ms50, bin_ms1, ) plt.savefig(crosscorrelograms.png)unit_pairs显式指定要考察的单元对。互相关图中 0 ms 附近的对称峰值提示功能连接或共同输入而单侧偏移峰则提示单向连接或排序分裂。6.3 相关图矩阵sw.plot_autocorrelograms( analyzer, unit_idsanalyzer.sorting.unit_ids[:10], # First 10 units ) plt.savefig(acg_matrix.png)不指定window_ms/bin_ms时使用计算扩展时保存的参数此处沿用 50/1 ms。一次绘制前 10 个单元的自相关图矩阵作为「全单元质量一瞥」。7. 峰电位序列图Spike Train7.1 栅栏图Rastersw.plot_rasters( sorting, time_range(0, 30), # First 30 seconds unit_idsunit_ids[:5], ) plt.savefig(raster.png)time_range(0, 30)限定只显示前 30 秒unit_ids[:5]控制参与绘制的单元数量避免单元过多时栅栏过密无法阅读。7.2 随时间变化的发放率unit_id 0 spike_train sorting.get_unit_spike_train(unit_id) fs recording.get_sampling_frequency() times spike_train / fs # Compute firing rate histogram bin_width 1.0 # seconds bins np.arange(0, recording.get_total_duration(), bin_width) hist, _ np.histogram(times, binsbins) firing_rate hist / bin_width plt.figure(figsize(12, 3)) plt.bar(bins[:-1], firing_rate, widthbin_width, edgecolornone) plt.xlabel(Time (s)) plt.ylabel(Firing rate (Hz)) plt.title(fUnit {unit_id} firing rate) plt.savefig(funit_{unit_id}_firing_rate.png, dpi300)峰电位时间戳以采样点为整数sample index需除以采样率fs转为秒bin_width 1.0秒的直方图即 1 秒分辨率下的瞬时发放率曲线该图能直接暴露「单元在记录中途消失」发放率塌到 0等稳定性问题与presence_ratio指标互为印证。8. 探针与位置图8.1 探针布局sw.plot_probe_map(recording, with_channel_idsTrue) plt.savefig(probe_layout.png)plot_probe_map按探针几何绘制所有通道位置。仓库的 explore_recording.py 用它生成长条形的探针布局图figsize(4, 12)用于数据检查阶段的probe_map.png输出。8.2 单元在探针上的位置sw.plot_unit_locations(analyzer, with_channel_idsTrue) plt.savefig(unit_locations.png)plot_unit_locations展示所有单元在探针深度上的分布需要已计算unit_locations扩展standard_workflow.md 使用methodmonopolar_triangulation单极三角定位。8.3 峰电位位置分布sw.plot_spike_locations(analyzer, unit_ids[unit_id]) plt.savefig(funit_{unit_id}_spike_locations.png)展示单个单元每次发放的空间位置散布散布范围小且集中说明该单元空间足迹稳定范围过大则可能混入了邻近神经元。9. 幅度图9.1 幅度随时间变化sw.plot_amplitudes( analyzer, unit_ids[unit_id], plot_histogramsTrue, ) plt.savefig(funit_{unit_id}_amplitudes.png)plot_histogramsTrue在时间序列旁边附加幅度分布直方图。幅度随时间的稳定性是单元质量的重要维度——若幅度呈台阶式突变往往是两个单元被合并或单元在漂移。9.2 手动绘制幅度分布amplitudes analyzer.get_extension(spike_amplitudes).get_data() spike_vector sorting.to_spike_vector() unit_idx list(sorting.unit_ids).index(unit_id) unit_mask spike_vector[unit_index] unit_idx unit_amps amplitudes[unit_mask] fig, ax plt.subplots(figsize(6, 4)) ax.hist(unit_amps, bins50, edgecolorblack, alpha0.7) ax.axvline(np.median(unit_amps), colorred, linestyle--, labelmedian) ax.set_xlabel(Amplitude (uV)) ax.set_ylabel(Count) ax.set_title(fUnit {unit_id} Amplitude Distribution) ax.legend() plt.savefig(funit_{unit_id}_amp_dist.png, dpi300)这里展示了直接从扩展取数的底层做法spike_amplitudes扩展的get_data()返回与sorting.to_spike_vector()行序一致的幅度数组因此可用unit_index掩码按单元切片。该模式是后续「手动多面板汇总图」第 10.2 节的基础。10. ISI 图发放间隔直方图10.1 内置 ISI 分布sw.plot_isi_distribution( analyzer, unit_ids[unit_id], window_ms100, bin_ms1, ) plt.savefig(funit_{unit_id}_isi.png)发放间隔Inter-Spike Interval, ISI是检验不应期的最直接手段所有神经元都有约 1.5 ms 的不应期ISI 直方图在 0 ms 附近的缺口越干净单元隔离质量越高参考 QUALITY_METRICS.md 中isi_violations_ratio一节。10.2 带不应期参考线的精细 ISI 图spike_train sorting.get_unit_spike_train(unit_id) fs recording.get_sampling_frequency() isis np.diff(spike_train) / fs * 1000 # ms fig, ax plt.subplots(figsize(8, 4)) ax.hist(isis[isis 100], bins100, edgecolorblack, alpha0.7) ax.axvline(1.5, colorred, linestyle--, label1.5ms refractory) ax.axvline(3.0, colororange, linestyle--, label3ms threshold) ax.set_xlabel(ISI (ms)) ax.set_ylabel(Count) ax.set_title(fUnit {unit_id} ISI Distribution) ax.legend() plt.savefig(funit_{unit_id}_isi_detailed.png, dpi300)np.diff(spike_train) / fs * 1000相邻发放时间差秒转毫秒1.5 ms 红线标注生理不应期边界3.0 ms 橙线标注isi_violations_ratio计算中常用的滑动窗口参考点仅统计 100 ms的间隔聚焦短间隔区域长间隔在大尺度分布中会被压缩到不可读。11. 汇总图Summary11.1 内置单单元汇总面板# Built-in one-call summary (waveform, template, ACG, amplitudes, location) sw.plot_unit_summary(analyzer, unit_idunit_id) plt.savefig(funit_{unit_id}_summary.png, dpi300, bbox_inchestight)plot_unit_summary一个调用即可生成包含波形、模板、自相关图、幅度轨迹与单元位置的多面板图是审阅单个单元的最高效入口。该图在 AI 辅助策展中同样关键AI_CURATION.md 推荐先渲染unit_summary图再交给视觉语言模型判断隔离质量并给出每个面板的审阅要点面板内容观察要点Waveforms单次波形一致性、形状Template均值 ± 标准差干净的负峰、生理形状Autocorrelogram发放时间结构0 ms 处的不应期缺口Amplitudes幅度随时间变化稳定性、无漂移ISI histogram发放间隔不应期缺口 ~1.5 ms11.2 手动多面板汇总图当需要完全控制面板组成与排版例如论文补充图时可从扩展直接取数手动拼装fig plt.figure(figsize(16, 12)) # Waveforms ax1 fig.add_subplot(2, 3, 1) wfs analyzer.get_extension(waveforms).get_waveforms(unit_id) for i in range(min(50, wfs.shape[0])): ax1.plot(wfs[i, :, 0], k, alpha0.1, linewidth0.5) template wfs.mean(axis0)[:, 0] ax1.plot(template, b, linewidth2) ax1.set_title(Waveforms) # Template ax2 fig.add_subplot(2, 3, 2) templates_ext analyzer.get_extension(templates) template templates_ext.get_unit_template(unit_id, operatoraverage) template_std templates_ext.get_unit_template(unit_id, operatorstd) x range(template.shape[0]) ax2.plot(x, template[:, 0], b, linewidth2) ax2.fill_between(x, template[:, 0] - template_std[:, 0], template[:, 0] template_std[:, 0], alpha0.3) ax2.set_title(Template) # Autocorrelogram ax3 fig.add_subplot(2, 3, 3) correlograms analyzer.get_extension(correlograms) ccg, bins correlograms.get_data() unit_idx list(sorting.unit_ids).index(unit_id) ax3.bar(bins[:-1], ccg[unit_idx, unit_idx, :], widthbins[1]-bins[0], colorgray) ax3.axvline(0, colorr, linestyle--, alpha0.5) ax3.set_title(Autocorrelogram) # Amplitudes ax4 fig.add_subplot(2, 3, 4) amps_ext analyzer.get_extension(spike_amplitudes) amps amps_ext.get_data() spike_vector sorting.to_spike_vector() unit_mask spike_vector[unit_index] unit_idx unit_times spike_vector[sample_index][unit_mask] / fs unit_amps amps[unit_mask] ax4.scatter(unit_times, unit_amps, s1, alpha0.3) ax4.set_xlabel(Time (s)) ax4.set_ylabel(Amplitude) ax4.set_title(Amplitudes) # ISI ax5 fig.add_subplot(2, 3, 5) isis np.diff(sorting.get_unit_spike_train(unit_id)) / fs * 1000 ax5.hist(isis[isis 100], bins50, colorgray, edgecolorblack) ax5.axvline(1.5, colorr, linestyle--) ax5.set_xlabel(ISI (ms)) ax5.set_title(ISI Distribution) # Metrics ax6 fig.add_subplot(2, 3, 6) unit_metrics metrics.loc[unit_id] text_lines [f{k}: {v:.4f} for k, v in unit_metrics.items() if not np.isnan(v)] ax6.text(0.1, 0.9, \n.join(text_lines[:8]), transformax6.transAxes, verticalalignmenttop, fontsize10, familymonospace) ax6.axis(off) ax6.set_title(Metrics) plt.tight_layout() plt.savefig(funit_{unit_id}_full_summary.png, dpi300)逐面板实现要点Waveformsget_waveforms(unit_id)返回 shape 为(n_spikes, n_samples, n_channels)的数组取[:, :, 0]即主通道波形绘制前 50 条半透明黑线叠加均值蓝线Templatetemplates扩展的get_unit_template(unit_id, operatoraverage/std)分别取均值与标准差模板用fill_between绘制均值 ± 标准差包络Autocorrelogramcorrelograms.get_data()返回(ccg, bins)其中ccg的 shape 为(n_units, n_units, n_bins)对角线切片ccg[unit_idx, unit_idx, :]即目标单元的自相关Metrics从质量指标 DataFrame 中取当前单元行过滤 NaN 后以等宽字体列出前 8 项——注意metrics.loc[unit_id]要求索引与单元 ID 一一对应若排序器返回的 unit_id 是整数此处直接可用。这套模式把「widget 封装的渲染」与「扩展数据」打通是理解 SpikeInterface 数据模型waveforms / templates / correlograms / spike_amplitudes 均为 analyzer 的扩展的最佳示例。12. 发表级排版设置12.1 图幅尺寸# Single column (3.5 inches) fig, ax plt.subplots(figsize(3.5, 3)) # Double column (7 inches) fig, ax plt.subplots(figsize(7, 4)) # Full page fig, ax plt.subplots(figsize(7, 9))按目标期刊的单栏约 3.5 英寸、双栏约 7 英寸与整页7 × 9 英寸规格创建画布是避免投稿后被要求重排图的低成本习惯。12.2 字号设置plt.rcParams.update({ font.size: 8, axes.titlesize: 9, axes.labelsize: 8, xtick.labelsize: 7, ytick.labelsize: 7, legend.fontsize: 7, font.family: Arial, })打印print规格下字号普遍在 7–9 pt 之间标题略大于正文9坐标轴标签 8刻度与图例 7。font.familyArial是多数期刊接受的无衬线默认字体。12.3 导出设置# For publications plt.savefig(figure.pdf, formatpdf, bbox_inchestight) plt.savefig(figure.svg, formatsvg, bbox_inchestight) # High-res PNG plt.savefig(figure.png, dpi600, bbox_inchestight, facecolorwhite)矢量格式优先PDF/SVG 用于正文插图与投稿系统缩放不失真高分辨率位图600 dpi PNG 用于预览与部分期刊的位图要求bbox_inchestight裁掉空白边距facecolorwhite避免透明背景在部分排版环境变黑。12.4 色盲友好配色# Colorblind-friendly colors [#0072B2, #E69F00, #009E73, #CC79A7, #F0E442] # For good/mua/noise label_colors {good: #2ecc71, mua: #f39c12, noise: #e74c3c}第一组来自色盲友好的 Okabe-Ito 调色板蓝色、橙色、绿色、品红、黄色第二组用于区分策展标签。将label_colors传入第 5.4 节的分组直方图即可让 good/mua/noise 在黑白打印或色盲读者眼中依然可区分。13. 与仓库脚本结合pipeline 与探索脚本中的真实绘图绘图指南中的 API 在仓库脚本中有多处直接落地可作为「怎么把图画进自动化流程」的参考探索脚本 explore_recording.py--plot参数触发三张检查图——plot_probe()探针布局、plot_traces()抽取至多 20 通道的 1 秒原始轨迹按通道偏移叠加绘制、plot_power_spectrum()scipy.signal.welch计算功率谱用 300/6000 Hz 竖线标注滤波边界。调用方式python scripts/explore_recording.py /path/to/data --plot --output plots/端到端管线 neuropixels_pipeline.pycheck_drift()将漂移栅栏以散点图形式保存为drift_check.png12 × 6 英寸、150 dpi同时在终端输出估算漂移范围供run_pipeline()决定是否执行运动校正。其余导出环节还通过si.export_report(analyzer, report/, formatpng)自动生成全单元图报告见 SKILL.md 的 Export 一节可作为「批量出图」的现成方案。分析模板 analysis_template.py完整模板展示了绘图所需的扩展计算顺序random_spikes → waveforms → templates → noise_levels → spike_amplitudes → correlograms → unit_locations并输出quality_metrics.csv——绘图中用到的metricsDataFrame 正来自这里。复制该模板到自己的工作目录cp assets/analysis_template.py my_analysis.py并修改 PARAMETERS 段即可获得包含全部绘图前提的基线工程。14. 常见误区与最佳实践先算扩展再绘图所有波形/相关图/幅度图依赖 analyzer 扩展漏算waveforms或correlograms时 widget 会直接报错。建议按 analysis_template.py 的顺序一次性计算。绘图参数与计算参数保持一致自相关/互相关/ISI 的window_ms、bin_ms最好与analyzer.compute(correlograms, ...)保持一致避免看到与数据实际分箱不一致的图。漂移图必须在排序前看超过约 10 μm 的漂移会显著劣化排序质量SKILL.md 的 Pitfalls管线以 20 μm 为自动运动校正触发阈值。栅栏图注意点密度超过约 10 万个峰时建议随机下采样再散点绘制管线做法否则渲染极慢且文件巨大。汇总图用于终审内置plot_unit_summary是人工或 AI 审阅每个单元的标准入口结合 AI_CURATION.md 中「waveform 一致性、自相关不应期缺口、幅度稳定性」三条准则可系统化判断 good/mua/noise。面向发表的图尽早确定规格从第一张图就套用第 12 节的字号/尺寸/配色避免后期批量重排。15. 小结从漂移栅栏图到手动多面板汇总图SpikeInterface 的 widgets 模块覆盖了 Neuropixels 分析全生命周期的可视化需求。绘图指南给出的每一类图都对应一个可验证的质量维度漂移图对应运动稳定性、波形/模板图对应空间与形态特征、相关图与 ISI 图对应不应期与隔离质量、幅度图对应稳定性、质量指标图对应策展决策。将这些图嵌入仓库提供的探索脚本、端到端管线与分析模板即可得到从原始数据到论文图表的完整、可复现的视觉工作流。完整函数清单可对照 api_reference.md深入理解指标阈值可阅读 QUALITY_METRICS.md。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考