Я пытаюсь построить контурный график с пакетом Matplotlib от Python. Я пытаюсь получить аналогичные результаты с тем, что можно увидеть в this другом столбце переполнения стека. Тем не менее, у меня проблема с этим, говоря, что существует ошибка типа, и она сообщает мне TypeError: Invalid dimensions for image data
, что видно из полного кода ошибки ниже.Построение контурного участка в Python с помощью Matplotlib с данными imshow
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