新视角资讯
Article

Plotly 散点图“老炮儿”的叛逆心声:别再教我入门了!

发布时间:2026-02-04 03:10:01 阅读量:8

.article-container { font-family: "Microsoft YaHei", sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; }
.article-container h1

Plotly 散点图“老炮儿”的叛逆心声:别再教我入门了!

摘要:受够了千篇一律的 Plotly 散点图入门教程?本文由数据可视化“老炮儿”执笔,深入挖掘 Plotly 散点图的隐藏参数和高级用法,带你领略 `customdata`、`hovertemplate`、`marker.gradient` 等参数的强大之处,解锁散点图 + X 的骚操作,并分享性能优化“玄学”。拒绝平庸,追求极致,让你的散点图不再平淡无奇!

Plotly 散点图:入门?不存在的!

我说各位,2026 年了,还在写 Plotly 散点图入门教程呢? 满大街都是 plotly.express.scatter(),X 轴 Y 轴,color 参数,看得我都要吐了。 你们能不能有点追求? Plotly 的强大之处,难道就只有这些? 今天,我就来扒一扒 Plotly 散点图那些被你们忽略的“隐藏玩法”,保证让你看完直呼“卧槽,原来还能这么玩!”。 这不是一篇入门教程,这是一篇让你进阶的“秘籍”。

参数“冷门榜”:玩转高级定制

1. customdata:数据,远不止你看到的

散点图,展示的是 X 和 Y 的关系?Naive! customdata 让你把隐藏的数据也带上。 想象一下,你有一堆客户数据,X 轴是消费金额,Y 轴是活跃天数。 你想知道每个客户的姓名、联系方式,总不能直接显示在图上吧? 这时候,customdata 就派上用场了!

import plotly.graph_objects as go

fig = go.Figure(data=go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[2, 4, 1, 3, 5],
    mode='markers',
    marker=dict(size=[40, 60, 80, 100, 120]),
    customdata=['张三', '李四', '王五', '赵六', '钱七'],
    hovertemplate='姓名: %{customdata}<br>消费金额: %{x}<br>活跃天数: %{y}<extra></extra>'
))

fig.show()

这段代码,把客户姓名放到了 customdata 里,然后在 hovertemplate 里用 %{customdata} 引用。 鼠标悬停在数据点上,就能看到客户姓名了。 这只是个简单的例子,customdata 还可以放更复杂的数据结构,比如字典、列表,甚至是你自定义的类。只要你敢想,就能玩出花来。

2. hovertemplate:告别千篇一律的提示框

hovertemplate 绝对是提升散点图逼格的利器。 默认的提示框,丑陋不堪,信息冗余。 hovertemplate 让你完全自定义提示框的内容和样式。 你可以用 HTML 标签,添加图片、链接,甚至可以嵌入 JavaScript 代码。 前面 customdata 的例子已经展示了 hovertemplate 的基本用法。 这里再来一个更骚气的:

import plotly.graph_objects as go

fig = go.Figure(data=go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[2, 4, 1, 3, 5],
    mode='markers',
    marker=dict(size=20),
    text=['A', 'B', 'C', 'D', 'E'],
    hovertemplate='<b>%{text}</b><br><br>X: %{x}<br>Y: %{y}<extra></extra>'
))

fig.update_layout(hoverlabel=dict(
    bgcolor="white",
    font_size=16,
    font_family="Rockwell"
))

fig.show()

这段代码,用 <b> 标签加粗了 text 字段,还修改了提示框的背景颜色和字体。 提示框瞬间变得高大上了有木有?

3. marker.gradient:让你的数据点“活”起来

还在用单一颜色表示数据点? 太 low 了! marker.gradient 让你用渐变色来表示数据。 想象一下,你有一堆商品数据,X 轴是销量,Y 轴是利润。 你想用颜色来表示商品的库存量。 库存量越高,颜色越深。 这时候,marker.gradient 就派上用场了!

import plotly.graph_objects as go
import numpy as np

N = 100
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sizes = np.random.randint(10, 30, N)

fig = go.Figure(data=go.Scatter(
    x=x,
    y=y,
    mode='markers',
    marker=dict(
        size=sizes,
        color=colors,
        colorscale='Viridis',
        showscale=True
    )
))

fig.show()

这段代码,用 colorscale 参数指定了渐变颜色方案。 库存量越高,颜色越接近 Viridis 颜色方案的末端。 数据点瞬间变得更有层次感了有木有?

“散点图 + X” 的骚操作:组合拳才是王道

光会画散点图,只能算入门。 真正的 “Plotly 大佬”,会把散点图和其他功能结合起来,创造出更复杂的图表。

1. 散点图 + 地图:地理数据的可视化神器

如果你有地理位置数据(经纬度),可以把散点图和地图结合起来,在地图上展示数据点。 这在展示人口分布、销售区域、疫情传播等方面非常有用。 Plotly 提供了 plotly.graph_objects.Scattergeo 类,专门用于绘制地理散点图。

import plotly.graph_objects as go

fig = go.Figure(data=go.Scattergeo(
    lon=[-74, -73, -72],
    lat=[40, 41, 42],
    mode='markers',
    marker=dict(
        size=10,
        color='red',
        opacity=0.8
    )
))

fig.update_layout(
    geo=dict(
        scope='usa',
        showland=True,
        landcolor="rgb(217, 217, 217)",
    ),
)

fig.show()

这段代码,在地图上绘制了三个红色的数据点。 通过调整 geo 属性,可以修改地图的范围、颜色等。 结合 customdatahovertemplate,可以创建更丰富的地理数据可视化效果。

2. 散点图 + Dash:打造交互式数据仪表盘

如果想让用户自己探索数据,可以把散点图和 Dash 结合起来,创建一个交互式的数据仪表盘。 用户可以通过选择不同的条件,动态地过滤和展示数据。 这在数据分析、业务监控等方面非常有用。

由于篇幅限制,这里就不给出完整的 Dash 代码了。 但我可以告诉你,Dash 的核心思想是:把 Plotly 图表作为组件,嵌入到 Dash 应用中。 用户可以通过回调函数,根据用户的输入,动态地更新 Plotly 图表。

性能优化“玄学”:大数据量也不怕

Plotly 虽好,但遇到大数据量,也会卡成翔。 如何优化 Plotly 散点图的性能? 这里分享几个我的“独门秘籍”:

  1. 使用 webgl 渲染器webgl 渲染器比默认的 svg 渲染器更快,更适合处理大数据量。 在创建 go.Figure 对象时,可以指定 renderer='webgl'
  2. 使用 transforms 进行数据聚合:如果数据量太大,可以先对数据进行聚合,再绘制散点图。 Plotly 提供了 transforms 属性,可以对数据进行分组、统计等操作。
  3. 避免过度绘制:如果数据点过于密集,会导致过度绘制,影响性能。 可以通过调整 marker.opacitymarker.size 来减少过度绘制。

“彩蛋”:Plotly 散点图的未来展望

Plotly 的发展速度很快,未来肯定会涌现出更多更强大的功能。 我个人比较期待的是:

  • 更智能的自动布局:Plotly 的布局经常需要手动调整,希望未来能够实现更智能的自动布局。
  • 更强大的交互功能:希望未来能够提供更多的交互组件,让用户更方便地探索数据。
  • 更丰富的图表类型:希望未来能够支持更多的图表类型,满足更复杂的可视化需求。

总之,Plotly 散点图的潜力是无限的。 只要你敢于探索,敢于创新,就能用它创造出令人惊艳的数据可视化作品。

参考来源: