首页 > 解决方案 > 如何在大散点图中标记点(~280k 点)

问题描述

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

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

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

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

我非常愿意接受任何从我的数据中创建标记散点图的解决方案。

标签: pythonmatplotlibbigdatascatter-plot

解决方案


我能够像这样使用 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)

推荐阅读