用途
matplotlib 技能用于在 Emacs 中通过用户调用 "/matplotlib" 时,从当前交互上下文提取或推导可绘制的数据,并用 matplotlib 生成图表。最终以 Markdown 图片语法输出 PNG 图片,使其可以内联渲染。
主要能力
-
从最近的交互上下文中提取或推导可绘制的数据。
-
使用 matplotlib 生成 PNG 图片,背景透明。
-
将结果以 Markdown 图片形式输出在单独一行,例如:

-
根据数据选择合适的图表类型(折线、柱状、散点、直方图、饼图、热力图等)。
-
在有助于清晰表达时,添加标题、坐标轴标签和图例。
-
可通过参数控制图例、网格和边框样式,例如:
- 图例:
ax.legend(facecolor='#1a1a2e', edgecolor=FG, labelcolor=FG) - 网格:
ax.grid(True, alpha=0.2, color=FG) - 隐藏顶部和右侧边框,使图表更简洁。
- 图例:
使用方式
-
如果本次会话中尚未从前一次绘图获得 Emacs 前景色,则先查询:
emacsclient --eval ' (face-foreground (quote default))'返回类似 "#eeffff" 的十六进制颜色。之后所有绘图复用该颜色。
-
使用该颜色将 Python 脚本写入临时文件。
-
使用以下命令运行脚本:
uv run --with matplotlib /tmp/agent-plot-XXXX.py -
脚本运行成功后,在单独一行输出 Markdown 图片:

Python 脚本模板
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
fig.patch.set_alpha(0)
ax.set_facecolor('none')
FG = "#eeffff" # from emacsclient query
ax.spines['bottom'].set_color(FG)
ax.spines['left'].set_color(FG)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.tick_params(colors=FG)
ax.xaxis.label.set_color(FG)
ax.yaxis.label.set_color(FG)
ax.title.set_color(FG)
# ... plot commands using the data ...
plt.tight_layout()
plt.savefig("/tmp/agent-plot-XXXX.png", dpi=150, transparent=True)
适用场景
适用于用户希望在 Emacs 环境中快速将当前上下文中的数据可视化的场景,尤其是需要透明背景、能与编辑器主题颜色协调、并可内联显示的图表输出。
限制与规则
- 每次会话只查询一次 Emacs 前景色,之后复用;仅在颜色未知时重新查询。
- 必须使用
fig.patch.set_alpha(0)和ax.set_facecolor('none')实现透明背景。 savefig必须使用transparent=True。- 文件名必须包含时间戳,例如
/tmp/agent-plot-$(date +%s).png;不得使用描述性名称如agent-plot-lorenz.png。 - 必须使用
uv run --with matplotlib运行脚本,不得使用pip install。 - 脚本成功运行后,才在单独一行输出 Markdown 图片。
- 如果最近的上下文中没有可绘制的数据,应告知用户。