使用Python(matplotlib、seaborn、plotly)进行专业数据可视化,创建出版级静态图表、统计图表及交互式可视化。
Python数据可视化. 使用Python的主要库创建专业图表,图表和统计可视化.是一项面向实际任务的技能,主要用于Libraries & User Cases.matplotlib - Static glot, 出版-quali。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 Python 主流库创建专业级图表、图形与统计可视化效果。
matplotlib —— 静态图表,出版级质量,完全可控
seaborn —— 统计可视化,开箱即用的美观默认样式
plotly —— 交互式图表,适用于 Web 环境
cd skills/python-dataviz python3 -m venv .venv source .venv/bin/activate pip install .
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘图
plt.figure(figsize=(10, 6))
plt.plot(x, y, linewidth=2, color='#667eea')
plt.title('Sine Wave', fontsize=16, fontweight='bold')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.grid(alpha=0.3)
plt.tight_layout()
# 导出
plt.savefig('output.png', dpi=300, bbox_inches='tight')
plt.savefig('output.svg', bbox_inches='tight')
分布/统计类:
plt.hist() 或 sns.histplot()sns.boxplot()sns.violinplot()sns.kdeplot()对比类:
plt.bar() 或 sns.barplot()sns.barplot(hue=...)plt.barh() 或 sns.barplot(orient='h')关系类:
plt.scatter() 或 sns.scatterplot()plt.plot() 或 sns.lineplot()sns.regplot() 或 sns.lmplot()热力图类:
sns.heatmap(df.corr())plt.imshow() 或 sns.heatmap()交互式图表:
plotly.express 或 plotly.graph_objectsplt.figure(figsize=(10, 6)) # 宽 × 高(英寸)
plt.savefig('output.png', dpi=300) # 出版用途:300 dpi;Web 显示:72–150 dpi
# Seaborn 配色方案(亦兼容 matplotlib)
import seaborn as sns
sns.set_palette("husl") # 色彩丰富
sns.set_palette("muted") # 柔和
sns.set_palette("deep") # 鲜明有力
# 自定义颜色
colors = ['#667eea', '#764ba2', '#f6ad55', '#4299e1']
# 即使使用 matplotlib,也可采用 seaborn 样式
import seaborn as sns
sns.set_theme() # 更优的默认配置
sns.set_style("whitegrid") # 可选项:whitegrid、darkgrid、white、dark、ticks
# 或直接使用 matplotlib 内置样式
plt.style.use('ggplot') # 可选项:ggplot、seaborn、bmh、fivethirtyeight
fig, axes = plt.subplots(2, 2, figsize=(12, 10)) axes[0, 0].plot(x, y1) axes[0, 1].plot(x, y2) # …… plt.tight_layout() # 防止标签重叠
# PNG:适合分享与嵌入(位图)
plt.savefig('chart.png', dpi=300, bbox_inches='tight', transparent=False)
# SVG:适合编辑与无损缩放(矢量图)
plt.savefig('chart.svg', bbox_inches='tight')
# Plotly(交互式图表)
import plotly.express as px
fig = px.scatter(df, x='col1', y='col2')
fig.write_html('chart.html')
详见 references/ 目录下的详细指南:
详见 scripts/ 目录中开箱即用的示例:
scripts/bar_chart.py —— 柱状图与分组柱状图scripts/line_chart.py —— 多序列折线图scripts/scatter_plot.py —— 带回归线的散点图scripts/heatmap.py —— 相关性热力图scripts/distribution.py —— 直方图、KDE、小提琴图scripts/interactive.py —— Plotly 交互式图表import pandas as pd
df = pd.read_csv('data.csv')
# 使用 pandas 内置绘图(底层调用 matplotlib)
df.plot(x='date', y='value', kind='line', figsize=(10, 6))
plt.savefig('output.png', dpi=300)
# 或使用 seaborn 实现更优视觉效果
sns.lineplot(data=df, x='date', y='value')
plt.savefig('output.png', dpi=300)
data = {'Category A': 25, 'Category B': 40, 'Category C': 15}
# Matplotlib 方式
plt.bar(data.keys(), data.values())
plt.savefig('output.png', dpi=300)
# Seaborn 方式(需转为 DataFrame)
import pandas as pd
df = pd.DataFrame(list(data.items()), columns=['Category', 'Value'])
sns.barplot(data=df, x='Category', y='Value')
plt.savefig('output.png', dpi=300)
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('output.png', dpi=300)
“No module named matplotlib”
cd skills/python-dataviz source .venv/bin/activate pip install -r requirements.txt
输出为空 / “Figure is empty”
plt.savefig() 在所有绘图命令执行之后调用plt.show() 查看交互式窗口坐标轴标签被截断
plt.tight_layout() # 在 plt.savefig() 前添加
# 或者
plt.savefig('output.png', bbox_inches='tight')
导出图像分辨率过低
plt.savefig('output.png', dpi=300) # 不要使用 72 或 100
该技能已预置含全部依赖的虚拟环境(venv),使用前请务必激活:
cd /home/matt/.openclaw/workspace/skills/python-dataviz source .venv/bin/activate
依赖项:matplotlib、seaborn、plotly、pandas、numpy、kaleido(用于 plotly 静态导出)