【问题标题】:Scatter plot on large amount of data大量数据的散点图
【发布时间】:2017-12-18 21:57:20
【问题描述】:

假设我有一个大型数据集(8500000X50)。我想散点图 X(日期)和 Y(在某一天进行的测量)。

我只能得到这个:

data_X = data['date_local']
data_Y = data['arithmetic_mean']
data_Y = data_Y.round(1)
data_Y = data_Y.astype(int)
data_X = data_X.astype(int)
sns.regplot(data_X, data_Y, data=data)
plt.show()

根据我在 Stackoverflow 上发现的“相同”问题,我可以对我的数据进行洗牌,或者采用例如 1000 个随机值并绘制它们。 但是如何以这样一种方式实现它,即每个 X(进行特定测量的日期)都对应于实际(Y 测量)。

【问题讨论】:

  • 尽管如此,你认为你能理解在图表上绘制的 8500000 个点而不是 8500 个点吗?
  • 我建议使用热图,这样您就不需要摆脱数据,并且可以获得更好的可视化效果。

标签: python pandas matplotlib seaborn


【解决方案1】:

首先,回答您的问题:

您应该使用pandas.DataFrame.sample 从您的日期帧中获取样本,然后使用regplot,下面是一个使用随机数据的小示例:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import numpy as np
import pandas as pd
import seaborn as sns

dates = pd.date_range('20080101', periods=10000, freq="D")
df = pd.DataFrame({"dates": dates, "data": np.random.randn(10000)})
   
dfSample = df.sample(1000) # This is the importante line
xdataSample, ydataSample = dfSample["dates"], dfSample["data"]

sns.regplot(x=mdates.date2num(xdataSample.astype(datetime)), y=ydataSample) 
plt.show()

regplot 上,由于日期时间的类型,我在我的 X 数据中执行了转换,请注意这绝对不是是必要的,具体取决于您的数据。

所以,不要像这样:

你会得到这样的东西:


现在,一个建议:

使用 docs 中的 sns.jointplot,它有一个 kind 参数:

种类:{“分散”| “注册” | “残渣” | “kde” | “十六进制”},可选

要绘制的情节。

我们在这里创建的内容与 matplotlib 的 hist2d 所做的类似,它使用您的整个数据集创建类似于热图的东西。使用随机数据的示例:

dates = pd.date_range('20080101', periods=10000, freq="D")
df = pd.DataFrame({"dates": dates, "data": np.random.randn(10000)})

xdata, ydata = df["dates"], df["data"]
sns.jointplot(x=mdates.date2num(xdata.astype(datetime)), y=ydata, kind="kde")

plt.show()

这会生成此图像,这也有助于查看沿所需轴的分布:

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多