Skip to main content

matplotlib-viz

Scientific visualization via Matplotlib. Use when: user asks for plots, charts, or data visualization. NOT for: interactive dashboards or web-based charts.

来源信息

仓库
beita6969/ScienceClaw
最近来源活动
2026年3月12日 04:53
检测到的 SKILL.md 语言
英语
星标
907
分支
104

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
matplotlib-viz
description
Scientific visualization via Matplotlib. Use when: user asks for plots, charts, or data visualization. NOT for: interactive dashboards or web-based charts.
metadata
{"openclaw":{"emoji":"📊","requires":{"bins":"[Truncated]"},"install":["[Truncated]"]}}
# Matplotlib Visualization Scientific visualization and publication-quality figures using Matplotlib and NumPy. ## When to Use - Static plots: line, scatter, bar, histogram, heatmap - Publication-ready scientific figures - Multi-panel (subplot) layouts - Saving figures to PNG, SVG, or PDF - Annotated or styled plots for presentations and papers ## When NOT to Use - Interactive dashboards (use Plotly or Dash) - Web-based charts (use D3.js or Chart.js) - Real-time streaming visualizations - Geographic/map plots (use Cartopy or Folium) ## Basic Setup ```python import matplotlib matplotlib.use('Agg') # non-interactive backend for saving files import matplotlib.pyplot as plt import numpy as np ``` ## Line and Scatter Plots ```python x = np.linspace(0, 10, 100) fig, ax = plt.subplots(figsize=(8, 5)) ax.plot(x, np.sin(x), label='sin(x)', linewidth=2) ax.plot(x, np.cos(x), label='cos(x)', linestyle='--') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Trigonometric Functions') ax.legend() fig.savefig('line_plot.png', dpi=150, bbox_inches='tight') plt.close(fig) # Scatter with colormap fig, ax = plt.subplots() sc = ax.scatter(x_data, y_data, c=color_values, cmap='viridis', s=50, alpha=0.7) fig.colorbar(sc, ax=ax, label='Magnitude') fig.savefig('scatter.png', dpi=150, bbox_inches='tight') plt.close(fig) ``` ## Bar Charts and Histograms ```python categories = ['A', 'B', 'C', 'D'] values = [23, 45, 12, 67] fig, ax = plt.subplots() ax.bar(categories, values, color='steelblue', edgecolor='black') ax.set_ylabel('Count') fig.savefig('bar_chart.png', dpi=150, bbox_inches='tight') plt.close(fig) # Histogram with KDE overlay fig, ax = plt.subplots() ax.hist(data, bins=30, density=True, alpha=0.7, color='skyblue', edgecolor='black') ax.set_xlabel('Value') ax.set_ylabel('Density') fig.savefig('histogram.png', dpi=150, bbox_inches='tight') plt.close(fig) ``` ## Heatmaps ```python data_matrix = np.random.rand(10, 10) fig, ax = plt.subplots(figsize=(8, 6)) im = ax.imshow(data_matrix, cmap='coolwarm', aspect='auto') fig.colorbar(im, ax=ax) ax.set_xticks(range(10)) ax.set_yticks(range(10)) fig.savefig('heatmap.png', dpi=150, bbox_inches='tight') plt.close(fig) ``` ## Subplots and Multi-Panel Figures ```python fig, axes = plt.subplots(2, 2, figsize=(10, 8)) axes[0, 0].plot(x, y1) axes[0, 0].set_title('Panel A') axes[0, 1].scatter(x, y2, s=10) axes[0, 1].set_title('Panel B') axes[1, 0].bar(categories, values) axes[1, 0].set_title('Panel C') axes[1, 1].hist(data, bins=20) axes[1, 1].set_title('Panel D') fig.tight_layout() fig.savefig('multi_panel.png', dpi=150, bbox_inches='tight') plt.close(fig) ``` ## Scientific Figure Templates ```python # Error bars fig, ax = plt.subplots() ax.errorbar(x, y_mean, yerr=y_std, fmt='o-', capsize=4, capthick=1.5, label='Experiment') ax.fill_between(x, y_mean - y_std, y_mean + y_std, alpha=0.2) fig.savefig('errorbar.png', dpi=300, bbox_inches='tight') plt.close(fig) # Box plot fig, ax = plt.subplots() bp = ax.boxplot([group1, group2, group3], labels=['Ctrl', 'Treatment A', 'Treatment B'], patch_artist=True, showmeans=True) fig.savefig('boxplot.png', dpi=300, bbox_inches='tight') plt.close(fig) # Violin plot fig, ax = plt.subplots() vp = ax.violinplot([group1, group2, group3], showmeans=True, showmedians=True) ax.set_xticks([1, 2, 3]) ax.set_xticklabels(['Ctrl', 'Treatment A', 'Treatment B']) fig.savefig('violin.png', dpi=300, bbox_inches='tight') plt.close(fig) ``` ## Saving Figures ```python fig.savefig('figure.png', dpi=300, bbox_inches='tight') # raster fig.savefig('figure.svg', bbox_inches='tight') # vector (editable) fig.savefig('figure.pdf', bbox_inches='tight') # vector (print-ready) ``` ## Journal-Quality Figure Standards **Sizing presets (width x height):** - single_column: `(8.5/2.54, 7/2.54)` — 8.5 x 7 cm - one_half_column: `(12/2.54, 9/2.54)` — 12 x 9 cm - double_column: `(17.5/2.54, 10/2.54)` — 17.5 x 10 cm - presentation: `(25/2.54, 18/2.54)` — 25 x 18 cm **Journal color palettes:** ```python PALETTES = { 'NPG': ["#E64B35", "#4DBBD5", "#00A087", "#3C5488", "#F39B7F", "#8491B4", "#91D1C2", "#DC0000", "#7E6148", "#B09C85"], 'Lancet': ["#00468B", "#ED0000", "#42B540", "#0099B4", "#925E9F", "#FDAF91", "#AD002A", "#ADB6B6"], 'JCO': ["#0073C2", "#EFC000", "#868686", "#CD534C", "#7AA6DC", "#003C67", "#8F7700", "#3B3B3B"], 'NEJM': ["#BC3C29", "#0072B5", "#E18727", "#20854E", "#7876B1", "#6F99AD", "#FFDC91", "#EE4C97"], } ``` **File naming:** Use descriptive names a human can understand months later: - `km_survival_thbs2_high_vs_low.png` (not `figure1.png`) - `volcano_plot_deseq2_tumor_vs_normal.png` (not `plot.png`) - `forest_plot_meta_analysis.pdf` (not `result.pdf`) ## Best Practices 1. Always use `matplotlib.use('Agg')` before importing `pyplot` for headless environments. 2. Use `fig, ax = plt.subplots()` (OO interface) instead of `plt.plot()` (state machine). 3. Call `plt.close(fig)` after saving to free memory. 4. Use `bbox_inches='tight'` to avoid clipped labels. 5. Set `dpi=300` for publication figures, `dpi=150` for screen. 6. Use colormaps from `matplotlib.colormaps` (avoid jet; prefer viridis, coolwarm). 7. **Never save to `/tmp/`.** Save to the project workspace directory for persistence. 8. Always report the full output path after saving so the user can find the file.
在 GitHub 查看