1
我正在嘗試使用matplotlib
使用Rbf
插值函數scipy.interpolate
模塊從具有四列和48000行(即48000個數據點)的數據文件製作等高線圖。第一列和第二列是等值線圖的兩個獨立變量。第三和第四列是兩個變量要繪製在單獨的面板中。在從大數據文件製作等高線圖時顯示「值錯誤:數組太大」錯誤。怎麼修?
https://drive.google.com/file/d/0B2HPaW59cSeQbW9PYVBkTHdHTlk/view?usp=sharing
的代碼如下:數據文件可以從下面的鏈接下載在Rbf
函數調用作爲線路
import numpy
from matplotlib import pyplot as plt
from matplotlib import rc, colorbar
from scipy.interpolate import Rbf
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
# Import data:
x, y, z1, z2 = numpy.loadtxt("data_contourplot.dat",
usecols = (0,1, 2, 3), unpack = True)
# Set up a regular grid of interpolation points
xi = numpy.linspace(min(x), max(x), 100)
yi = numpy.linspace(min(y), max(y), 100)
xi, yi = numpy.meshgrid(xi,yi)
rbf1 = Rbf(x, y, z1, function='linear')
rbf2 = Rbf(x, y, z2, function='linear')
z1i = rbf1(xi, yi)
z2i = rbf2(xi, yi)
fig1 = plt.figure(num=None, figsize=(8, 4), dpi=80, facecolor='w', edgecolor='k')
ax = plt.subplot(121)
cax = ax.imshow(z1i, vmin=z1.min(), vmax=z1.max(), origin='lower',
extent=[x.min(), x.max(), y.min(), y.max()])
#Function to adjust the layout of the plot
forceAspect(ay,aspect=1)
#plt.tight_layout()
fig1.colorbar(cay)
plt.show()
錯誤出現如下:
Traceback (most recent call last):
File "plot_contour_Ion_vs_delay_E_c.py", line 29, in <module>
rbf1 = Rbf(x, y, z1, function='linear')
File "/usr/lib/python2.7/dist-packages/scipy/interpolate/rbf.py", line 185, in __init__
r = self._call_norm(self.xi, self.xi)
File "/usr/lib/python2.7/dist-packages/scipy/interpolate/rbf.py", line 207, in _call_norm
return self.norm(x1, x2)
File "/usr/lib/python2.7/dist-packages/scipy/interpolate/rbf.py", line 107, in _euclidean_norm
return sqrt(((x1 - x2)**2).sum(axis=0))
ValueError: array is too big.
請幫我解決這個問題。 Rbf
函數對大小處理有一些限制。在Python
中編寫大規模數據文件和輪廓圖或任何2D/3D圖的一般編碼標準做法是什麼?