mcpField
P
plotly

plotly

github.com/leonchaox数据与数据库99472 次安装15 周前更新
代码仓库

关于 plotly

Plotly 是面向分析人员和开发者的 Python 绘图库,可用于制作交互式、适合出版的可视化。它以高级 API 快速绘制常见图表,也提供图形对象来精细定制多种图表。

主要功能

  1. 01创建 40 多种图表
  2. 02用 Plotly Express 绘制常见可视化
  3. 03使用图形对象定制图表
  4. 04构建子图并应用样式模板
  5. 05添加悬停、缩放、选择和动画交互
  6. 06导出交互式 HTML 或静态图像

适用场景

  1. 01通过交互式图表探索表格数据
  2. 02比较不同组别的统计分布
  3. 03可视化时间序列或金融数据
  4. 04组合多个图表构建仪表板

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill plotly

安装后在 Claude Code 中输入/plotly确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
chart-types.md
export-interactivity.md
graph-objects.md
layouts-styling.md
plotly-express.md

详细介绍

Plotly

用于创建交互式、出版级可视化的 Python 绘图库,支持 40 多种图表类型。

快速开始

安装 Plotly:

uv pip install plotly

使用 Plotly Express(高层 API)的基本用法:

import plotly.express as px
import pandas as pd

df = pd.DataFrame({
    'x': [1, 2, 3, 4],
    'y': [10, 11, 12, 13]
})

fig = px.scatter(df, x='x', y='y', title='My First Plot')
fig.show()

在 API 之间选择

使用 Plotly Express(px)

用于快速、标准的可视化,并具有合理的默认设置:

  • 处理 pandas DataFrame
  • 创建常见图表类型(散点图、折线图、柱状图、直方图等)
  • 需要自动颜色编码和图例
  • 希望代码最少(1-5 行)

完整指南见 reference/plotly-express.md。

使用 Graph Objects(go)

用于细粒度控制和自定义可视化:

  • Plotly Express 中不提供的图表类型(3D 网格、等值面、复杂金融图表)
  • 从零构建复杂的多轨迹图形
  • 需要对单个组件进行精确控制
  • 创建带有自定义形状和注释的专门可视化

完整指南见 reference/graph-objects.md。

注意: Plotly Express 返回 graph objects Figure,因此你可以组合使用这些方法:

fig = px.scatter(df, x='x', y='y')
fig.update_layout(title='Custom Title')  # Use go methods on px figure
fig.add_hline(y=10)                     # Add shapes

核心能力

1. 图表类型

Plotly 支持 40 多种图表类型,并按类别组织:

基础图表: 散点图、折线图、柱状图、饼图、面积图、气泡图

统计图表: 直方图、箱线图、小提琴图、分布图、误差条

科学图表: 热力图、等高线图、三元图、图像显示

金融图表: K 线图、OHLC、瀑布图、漏斗图、时间序列

地图: 散点地图、分级统计图、密度图(地理可视化)

3D 图表: scatter3d、surface、mesh、cone、volume

专用图表: 旭日图、矩形树图、桑基图、平行坐标图、仪表图

有关所有图表类型的详细示例和用法,见 reference/chart-types.md。

2. 布局和样式

子图: 创建具有共享轴的多图图形:

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=2, cols=2, subplot_titles=('A', 'B', 'C', 'D'))
fig.add_trace(go.Scatter(x=[1, 2], y=[3, 4]), row=1, col=1)

模板: 应用协调一致的样式:

fig = px.scatter(df, x='x', y='y', template='plotly_dark')
# Built-in: plotly_white, plotly_dark, ggplot2, seaborn, simple_white

自定义: 控制外观的每个方面:

  • 颜色(离散序列、连续色阶)
  • 字体和文本
  • 坐标轴(范围、刻度、网格)
  • 图例
  • 边距和尺寸
  • 注释和形状

有关完整的布局和样式选项,见 reference/layouts-styling.md。

3. 交互性

内置交互功能:

  • 悬停工具提示,可自定义数据
  • 平移和缩放
  • 图例切换
  • 框选/套索选择
  • 时间序列的范围滑块
  • 按钮和下拉菜单
  • 动画
# Custom hover template
fig.update_traces(
    hovertemplate='<b>%{x}</b><br>Value: %{y:.2f}<extra></extra>'
)

# Add rangeslider
fig.update_xaxes(rangeslider_visible=True)

# Animations
fig = px.scatter(df, x='x', y='y', animation_frame='year')

有关完整的交互性指南,见 reference/export-interactivity.md。

4. 导出选项

交互式 HTML:

fig.write_html('chart.html')                       # Full standalone
fig.write_html('chart.html', include_plotlyjs='cdn')  # Smaller file

静态图像(需要 kaleido):

uv pip install kaleido
fig.write_image('chart.png')   # PNG
fig.write_image('chart.pdf')   # PDF
fig.write_image('chart.svg')   # SVG

有关完整的导出选项,见 reference/export-interactivity.md。

常见工作流

科学数据可视化
import plotly.express as px

# Scatter plot with trendline
fig = px.scatter(df, x='temperature', y='yield', trendline='ols')

# Heatmap from matrix
fig = px.imshow(correlation_matrix, text_auto=True, color_continuous_scale='RdBu')

# 3D surface plot
import plotly.graph_objects as go
fig = go.Figure(data=[go.Surface(z=z_data, x=x_data, y=y_data)])
统计分析
# Distribution comparison
fig = px.histogram(df, x='values', color='group', marginal='box', nbins=30)

# Box plot with all points
fig = px.box(df, x='category', y='value', points='all')

# Violin plot
fig = px.violin(df, x='group', y='measurement', box=True)
时间序列和金融
# Time series with rangeslider
fig = px.line(df, x='date', y='price')
fig.update_xaxes(rangeslider_visible=True)

# Candlestick chart
import plotly.graph_objects as go
fig = go.Figure(data=[go.Candlestick(
    x=df['date'],
    open=df['open'],
    high=df['high'],
    low=df['low'],
    close=df['close']
)])
多图仪表板
from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=('Scatter', 'Bar', 'Histogram', 'Box'),
    specs=[[{'type': 'scatter'}, {'type': 'bar'}],
           [{'type': 'histogram'}, {'type': 'box'}]]
)

fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)
fig.add_trace(go.Bar(x=['A', 'B'], y=[1, 2]), row=1, col=2)
fig.add_trace(go.Histogram(x=data), row=2, col=1)
fig.add_trace(go.Box(y=data), row=2, col=2)

fig.update_layout(height=800, showlegend=False)

与 Dash 集成

对于交互式 Web 应用,请使用 Dash(Plotly 的 Web 应用框架):

uv pip install dash
import dash
from dash import dcc, html
import plotly.express as px

app = dash.Dash(__name__)

fig = px.scatter(df, x='x', y='y')

app.layout = html.Div([
    html.H1('Dashboard'),
    dcc.Graph(figure=fig)
])

app.run_server(debug=True)

参考文件

其他资源

评论

支持 Markdown