【问题标题】:How to label points in a large scatterplot (~280k points)如何在大散点图中标记点(~280k 点)
【发布时间】:2019-01-14 04:52:52
【问题描述】:

我有一个大约 280,000 个点的散点图,显示得非常好。但是,我想为每个点添加动态标签,这样当我放大图表时,我可以在每个点上看到一些文本。

我尝试在每个点上使用 plt.annotate,并且在少量点上使用

for index, row in points.iterrows():
    plt.annotate(row[0],  (row[1], row[2]))
    #if index+1 %100 == 0:
    #    break

这会导致窗口滞后,实际上不显示任何内容,而是显示标签。如果我取消注释中断,那么我仍然有一个相当滞后的窗口,其中有一大块黑色的重叠文本。如果文字只能在一定的放大倍率下显示,甚至在不同的放大倍率下缩放到合适的大小,那就太好了!

我非常愿意使用任何解决方案来根据我的数据创建带标签的散点图。

【问题讨论】:

  • 我不确定 Matplotlib 是否适合这项工作。这种动态调整听起来更像是一个 Javascript Graph Framework。如果你想留在 Python 中,你可以看看框架“Plotly”。我认为支持此交互功能。但我不确定它如何处理 280k 数据点(可能有点慢......)
  • Matplotlib 可能是这项工作的基础工具,但它的缩放自适应部分将通过自定义 GUI 完成。您还可以让 xy_coord 显示弹出光标下的值。

标签: python matplotlib bigdata scatter-plot


【解决方案1】:

我能够像这样使用 plotly 很好地绘制所有内容,使用 plotly 的 Scattergl 来加速一切。

import plotly as plotly
py = plotly.offline
import plotly.graph_objs as go

trace = go.Scattergl(
    x = points['x'], 
    y = points['y'],
    text = points['word'], 
    mode = 'markers',
    marker = dict(
        color = '#FFBAD2',
        line = dict(width = 1)
    )
)

data = [trace]
layout = plotly.graph_objs.Layout(hovermode='closest')
figure = plotly.graph_objs.Figure(data=data, layout=layout)
py.plot(figure)

【讨论】:

  • 你没有说你想要一个悬停解决方案,但是使用 matplotlib 看起来like this
猜你喜欢
  • 2012-10-25
  • 2021-08-16
  • 1970-01-01
  • 2022-01-16
  • 2013-01-27
  • 1970-01-01
  • 2019-09-30
  • 2013-10-31
相关资源
最近更新 更多