首页 > 解决方案 > 当有大数据(很多点)要绘制时,如何固定seaborn的散点图?

问题描述

我发现当需要绘制大量数据点时,Python中的方法比R中的seaborn.scatterplot()函数慢得多。geom_pointggplot2

例如 Python( seaborn) 中的相同数据:

sample_data = data.sample(10000)
ax = sns.scatterplot(data=sample_data, x="x", y="y", hue="cate")

在 R(· ggplot2) 中:

sample_data <- data[sample(nrow(data),10000),]
p <- ggplot(sample_data,aes(x=x,y=y)) +
    geom_point(aes(color=cate))

前者比后者慢得多。

我想知道是什么导致了效率的差异以及如何使效率seaborn尽可能快ggplot甚至更好?

为什么我不直接使用 R:我更喜欢 Python 的语法风格,并且我可以matplotlib在绘图后进行更多自定义,seabornggplot这样做可能不那么方便。

标签: pythonrmatplotlibggplot2seaborn

解决方案


要绘制“大数据”散点,我建议使用Plotlylibrary。它具有Scattergl管理多达数十亿个数据点的功能。

这是一个包含 100.000 个数据点的示例:

import plotly.graph_objects as go
import numpy as np

N = 100000
r = np.random.uniform(0, 1, N)
theta = np.random.uniform(0, 2*np.pi, N)

fig = go.Figure(data=go.Scattergl(
    x = r * np.cos(theta), # non-uniform distribution
    y = r * np.sin(theta), # zoom to see more points at the center
    mode='markers',
    marker=dict(
        color=np.random.randn(N),
        colorscale='Viridis',
        line_width=1
    )
))

fig.show()

结果:

在此处输入图像描述


推荐阅读