Surface Plot In Python - Memoryerror
Solution 1:
You are trying to plot too many points. To see this give your example some fake data:
from mpl_toolkits.mplot3dimportAxes3D
from scipy.statsimport gaussian_kde
import numpy as np
import matplotlib.pyplotas plt
fig = plt.figure()
ax = Axes3D(fig)
npoints = 100
X = np.linspace(0, 1, npoints)
Y = np.sin(X)
XY = np.vstack([X, Y])
x, y = np.meshgrid(X, Y)
z = gaussian_kde(XY)(XY).tolist()
ax.plot_surface(x, y, z)
plt.show()
This will work just fine, but if we make npoints=10000
then (on my machine) I can reproduce your error.
The solution depends on exactly what X
and Y
are. For example if they are some measured data output then you need to ask the question "do I need to plot all of this data?". In my experience if your trying to plot so many points that you get a memory error, then you won't be able to see all of the data when it is plotted anyway! So, you could down sample it, just pick every n
th point. First I would suggest turning X
and Y
into numpy
arrays
import numpy as np
X = np.array(X)
Y = np.array(Y)
Then, to get every 100th point do:
X = X[::100]
Y = Y[::100]
For more information on array slicing and indexing see the docs.
Alternatively you may feel that this "looses" some valuable information, in which case you could apply a rolling window average then separately consider the variations in each window to check you haven't missed anything. Ultimately it will all depend on what the data is.
Post a Comment for "Surface Plot In Python - Memoryerror"