2016-02-28 65 views
0

我想用Python的Matplotlib軟件包繪製一個等值線圖。我試圖得到類似的結果,可以在this其他堆棧溢出帖子中看到。但是,我遇到了這樣的問題:它有一個類型錯誤,它告訴我TypeError: Invalid dimensions for image data,這可以在下面的完整錯誤代碼中看到。使用Matplotlib繪製一個帶有imshow數據的Python等高線圖

Traceback (most recent call last): 
    File "./plot_3.py", line 68, in <module> 
     plt.imshow(zi, vmin=temp.min(), vmax=temp.max(), origin="lower", extent=[x.min(), x.max(), y.min(), y.max()]) 
    File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 3022, in imshow 
**kwargs) 
    File "/usr/lib64/python2.7/site-packages/matplotlib/__init__.py", line 1812, in inner 
     return func(ax, *args, **kwargs) 
    File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_axes.py", line 4947, in imshow 
     im.set_data(X) 
    File "/usr/lib64/python2.7/site-packages/matplotlib/image.py", line 453, in set_data 
     raise TypeError("Invalid dimensions for image data") 
TypeError: Invalid dimensions for image data 

我不確定這是什麼意思,因爲谷歌搜索沒有提供有用的結果如何解決它。代碼如下所示,我正在使用的數據可以在here找到。下面的代碼只是運行代碼,它將解析文件,然後將數據返回到假設爲的主數據,然後繪製它。要運行代碼,您必須使用./plot_3.py 20.0將其與我上面發佈的特定文件一起使用。 x的範圍是從0到0.3,有61個網格,而y的範圍從0到0.4,有81個網格。數據格式爲x,y,temperature,我希望temperature值爲輪廓值。如果有人對如何解決這個問題有任何想法,我會非常感激。先謝謝了!

from __future__ import print_function, division 
import math 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
import sys 
import matplotlib.cm as cm 
from matplotlib.mlab import griddata 
import scipy.interpolate 

def ParseFile(filename): 
    x = [] 
    y = [] 
    temp = [] 
    infile = open(filename, 'r') 

    lines = [line.strip() for line in infile.readlines()] 

    for line in lines: 
     x.append(float(line.split(',')[0])) 
     y.append(float(line.split(',')[1])) 
     temp.append(float(line.split(',')[2])) 

    return np.array(x), np.array(y), np.array(temp) 

time = str(sys.argv[1]) 
filename = time + "_sec.dat" 

x,y,temp = ParseFile(filename) 
xi = np.linspace(min(x), max(x)) 
yi = np.linspace(min(y), max(y)) 
zi = scipy.interpolate.griddata((x,y),temp,(xi,yi),method="linear") 

matplotlib.rcParams['xtick.direction'] = 'out' 
matplotlib.rcParams['ytick.direction'] = 'out' 
plt.imshow(zi, vmin=temp.min(), vmax=temp.max(), origin="lower", 
      extent=[x.min(), x.max(), y.min(), y.max()]) 
plt.colorbar() 
plt.show() 

回答

0

我認爲問題是,你需要有一個網格格式要插補點,而不是兩個對interpolate.griddata功能1D矩陣。

添加此行的(X1,yi)的聲明,我認爲解決您的問題:

x,y,temp = ParseFile(filename) 
xi = np.linspace(min(x), max(x)) 
yi = np.linspace(min(y), max(y)) 
#create the 2D grid for interpolation: 
xi, yi = np.meshgrid(xi,yi) 
zi = scipy.interpolate.griddata((x,y),temp,(xi,yi),method="linear") 
+0

謝謝!是的,就是這樣! – Cmertin

相關問題