我有一系列数据,包括来自几个实验的值(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?
答案 0 :(得分:1)
我不能完全了解您对数据的所有维度所做的事情,但您可以尝试的一个非常简单的事情就是像这样使用'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)