matplotlib.pyplot 的平滑曲线,使用 pandas 或 numpy/scipy



我有一系列数据,其中包括来自几个实验的值(1-40,在MWE中是1-5)。我的原始数据中的条目总数为 ~4.000.000,我尝试平滑以显示它:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import spline
from statsmodels.nonparametric.smoothers_lowess import lowess
df = pd.DataFrame()
df["values"] = np.random.randint(100000, 200000, 1000)
df["id"] = [1,2,3,4,5] * 200
plt.figure(1, figsize=(11.69,8.27))
# Both fail for my amount of data:
plt.plot(spline(df["values"], df["id"], range(100)), "r-")
plt.plot(lowess(df["values"], df["id"]), "r-")

scipy.interplate 和 statsmodels.nonparametric.smoothers_lowess.lowess 都会为我的数据抛出内存异常。有没有有效的方法来解决这个问题,例如,使用 ggplot2 和 geom_smooth() 的 GNU R?

我不太清楚你对数据的所有维度都得到了什么,但你可以尝试的一件非常简单的事情是像这样使用"markevery"kwarg:

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(1,100,1E7)
y=x**2
plt.figure(1, figsize=(11.69,8.27))
plt.plot(x,y,markevery=100)
plt.show()

这将只绘制每 n 个点(此处为 n=100)。

如果这没有帮助,那么您可能只想尝试使用较少样本的简单numpy插值,如下所示:

x_large=np.linspace(1,100,1E7)
y_large=x**2
x_small=np.linspace(1,100,1E3)
y_small=np.interp(x_small,x_large,y_large)
plt.plot(x_small,y_small)

最新更新