我想用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()
謝謝!是的,就是這樣! – Cmertin