关于 data-visualization
data-visualization 是将结构化数据转化为图表的 AI Agent 技能,根据分析问题选择图表类型,并生成静态或交互式可视化。适用于需要探索数据、制作报告或构建仪表板的场景。
主要功能
- 01依据分析问题选择图表
- 02使用 matplotlib 和 seaborn 制作静态图表
- 03使用 plotly 创建交互式图表
- 04整理数据以适配绘图
- 05添加标签、图例和注释
- 06导出 PNG、SVG 或 HTML
适用场景
- 01比较不同类别的数据
- 02呈现时间序列趋势
- 03探索变量间关系或数据分布
- 04制作报告图表或交互式仪表板
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill data-visualization安装后在 Claude Code 中输入/data-visualization确认已加载。
详细介绍
数据可视化
此技能使 AI Agent 能将结构化数据转换为有意义的可视化表示。Agent 会根据数据和所提出的问题选择合适的图表类型,使用 matplotlib 和 seaborn 绘制达到出版质量的静态图表,并使用 plotly 创建交互式可视化。此技能遵循成熟的数据可视化原则,确保图表清晰、准确且美观。
工作流
-
了解数据和问题。 检查数据集的结构——变量数量、类型(数值型、类别型、时间型),以及用户希望突出显示的关系或比较。与单看数据相比,问题对图表选择的影响更大。
-
选择合适的图表类型。 根据分析目标选择恰当的可视化形式。类别比较使用条形图,展示时间趋势使用折线图,展示两个连续变量之间的关系使用散点图,展示分布使用直方图,展示离散程度和异常值使用箱线图,展示相关矩阵或密集类别网格使用热力图。
-
准备绘图数据。 根据需要对数据进行汇总、透视或重塑。绘制条形图时,按数值对类别轴排序。将时间序列重采样到合适的粒度。确保没有 NaN 值进入图表,以免产生空隙或错误。
-
使用合适的样式创建可视化。 使用统一的调色板、易读的坐标轴标签、描述性标题和恰当的图例。移除图表杂项——不必要的网格线、边框和装饰。根据预期的输出媒介(报告、幻灯片、仪表板)设置合适的图形尺寸。
-
添加背景信息和注释。 使用注释、参考线或阴影区域突出关键数据点。在有帮助的情况下,直接在图表中添加汇总统计信息(例如,箱线图上的中位数线、散点图上的趋势线)。背景信息能让图表从装饰变成分析工具。
-
导出或显示。 将静态图表保存为 PNG 或 SVG,以用于报告;也可以渲染交互式 HTML,用于仪表板和探索。将 DPI 设置为 150 以上,以获得适合打印的输出质量。
支持的技术
- matplotlib — 基础绘图库,可全面控制每个视觉元素
- seaborn — 具有合理默认设置和内置主题的统计可视化库
- plotly — 支持悬停提示、缩放和平移的交互式图表
- plotly.express — 简洁的 API,可快速创建交互式图表
何时使用哪种图表类型
| 目标 | 图表类型 | 库 |
|---|---|---|
| 比较类别 | 条形图(垂直或水平) | matplotlib, seaborn |
| 展示时间趋势 | 折线图 | matplotlib, plotly |
| 探索 2 个变量之间的关系 | 散点图 | seaborn, plotly |
| 展示变量的分布 | 直方图或 KDE | seaborn |
| 比较不同组的分布 | 箱线图或小提琴图 | seaborn |
| 展示相关矩阵 | 热力图 | seaborn |
| 展示构成/比例 | 堆叠条形图或饼图 | matplotlib |
| 支持用户探索 | 交互式图表 | plotly |
用法
向 Agent 提供数据集,并描述你希望可视化的内容。也可以指定图表类型、颜色偏好、输出格式和图形尺寸。如果未指定图表类型,Agent 将选择最佳方案。
示例
示例 1:使用 matplotlib 和 seaborn 创建销售仪表板
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv("quarterly_sales.csv", parse_dates=["date"])
sns.set_theme(style="whitegrid", palette="viridis")
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle("Q4 2024 Sales Dashboard", fontsize=16, fontweight="bold")
# 1. Monthly revenue trend
monthly = df.resample("M", on="date")["revenue"].sum()
axes[0, 0].plot(monthly.index, monthly.values, marker="o", linewidth=2)
axes[0, 0].set_title("Monthly Revenue Trend")
axes[0, 0].set_ylabel("Revenue ($)")
axes[0, 0].tick_params(axis="x", rotation=45)
# 2. Revenue by region (horizontal bar)
region = df.groupby("region")["revenue"].sum().sort_values()
axes[0, 1].barh(region.index, region.values, color=sns.color_palette("viridis", len(region)))
axes[0, 1].set_title("Revenue by Region")
axes[0, 1].set_xlabel("Total Revenue ($)")
# 3. Units sold distribution (histogram)
axes[1, 0].hist(df["units_sold"], bins=30, edgecolor="white", alpha=0.8)
axes[1, 0].axvline(df["units_sold"].median(), color="red", linestyle="--", label="Median")
axes[1, 0].set_title("Units Sold Distribution")
axes[1, 0].legend()
# 4. Revenue vs. discount scatter with regression
sns.regplot(data=df, x="discount", y="revenue", ax=axes[1, 1],
scatter_kws={"alpha": 0.4, "s": 15}, line_kws={"color": "red"})
axes[1, 1].set_title("Revenue vs. Discount")
plt.tight_layout()
plt.savefig("sales_dashboard.png", dpi=150, bbox_inches="tight")
plt.show()
示例 2:使用 plotly 创建交互式可视化
import pandas as pd
import plotly.express as px
df = pd.read_csv("global_sales.csv")
# Interactive scatter with size, color, and hover data
fig = px.scatter(
df,
x="marketing_spend",
y="revenue",
size="units_sold",
color="region",
hover_data=["product_name", "quarter"],
title="Marketing Spend vs Revenue by Region",
labels={
"marketing_spend": "Marketing Spend ($)",
"revenue": "Revenue ($)",
"units_sold": "Units Sold"
},
template="plotly_white"
)
fig.update_traces(marker=dict(opacity=0.7, line=dict(width=1, color="DarkSlateGrey")))
# Add a trend line annotation
fig.add_annotation(
x=45000, y=320000,
text="Strong ROI cluster:<br>low spend, high revenue",
showarrow=True, arrowhead=2,
font=dict(size=12, color="darkblue")
)
fig.write_html("interactive_scatter.html")
fig.show()
# Users can hover over points to see product_name and quarter,
# zoom into clusters, and toggle regions on/off via the legend.
最佳实践
- 根据分析问题选择图表类型,而非只看美观程度——如果问题关注相关性,那么即使散点图未能揭示任何模式,它仍然是合适的选择。
- 将颜色类别限制在 7 个以内;超过此数量时,应使用分面或小图,而不是把更多颜色塞进同一个图例。
- 始终为坐标轴标注单位,并采用便于阅读的数字格式(例如,“$1.2M”,而不是“1200000”)。
- 柱状图的 y 轴应从零开始,以免夸大差异;如果重点是变化而非绝对值,折线图可以使用截断坐标轴。
- 默认使用适合色觉障碍者的调色板(viridis、cividis 或 ColorBrewer 定性配色方案)。
- 任何将用于文档或演示文稿的图表,导出分辨率应达到 150 DPI 或更高。
边缘情况
- 单张图表类别过多。 如果柱状图的柱子超过 15 根,应仅显示前 N 项,并将其余项汇总为“其他”类别,或改用树状图。
- 散点图中的点重叠。 当数千个点重叠时,使用透明度(
alpha=0.3)、抖动或六边形分箱/二维密度图。 - 坐标轴标签过长。 将标签旋转 45 度、用省略号截断,或改用横向柱状图,以确保文本清晰易读。
- 缺失值导致折线图出现间断。 对较小的间断(1-2 个点)进行线性插值,并用虚线段标出。对于较大的间断,应断开折线,避免暗示数据连续。
- 数据极度偏斜。 使用对数刻度坐标轴,并在坐标轴标签中清楚注明转换方式(例如,“收入(对数刻度)”)。