numpy contour: TypeError: Input z must be a 2D array
numpy contour: TypeError: Input z must be a 2D array
我有列表格式的数据。
看起来像这样:
[(x_1, y_1, Z_1),...(x_i, y_j, z_k),...(x_p, y_q, z_r)]
对于每个 x 和 y,都有一个 z。 X、Y、Z的长度分别为p、q、r(=p*q)
我打算绘制一个等高线图,其中 X 和 Y 为网格,Z 为要绘制的值。
我有如下代码(仅代表):
import csv
import sys
import statistics
import numpy as np
from scipy.interpolate import UnivariateSpline
from matplotlib import pyplot as plt
...........
#format of data = [(x, y, z)......]
#x, y, z are lists
X = [X1,..........,Xp] #length, p
Y = [Y1,..........,Yq] #length, q
Z = [Z1,..........,Zpq] #length, pq
#np.mesh
X1, Y1 = np.meshgrid(X, Y)
plt.figure()
CS = plt.contour(X1, Y1, Z)
plt.clabel(CS, inline=1, fontsize=10)
我收到以下错误:
Traceback (most recent call last):
File "C:/Users/uname/PycharmProjects/waferZoning/contour.py", line 49, in <module>
CS = plt.contour(X1, Y1, Z)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\pyplot.py", line 2766, in contour
ret = ax.contour(*args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\__init__.py", line 1811, in inner
return func(ax, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\axes\_axes.py", line 5640, in contour
return mcontour.QuadContourSet(self, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1428, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 873, in __init__
self._process_args(*args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1445, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1532, in _contour_args
x, y, z = self._check_xyz(args[:3], kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1566, in _check_xyz
raise TypeError("Input z must be a 2D array.")
TypeError: Input z must be a 2D array.
我明白错误是什么,但我无法纠正它。
我不能给出 MWE,但我想我已经很清楚地说明了我的问题。
https://www.dropbox.com/s/33jmfcjzikl4w5g/contour_synthetic.txt?dl=0
您需要一个 z
,其长度等于 x
和 y
的乘积:
assert len(z) == (len(x) * len(y))
制作 z
二维数组:
z = np.array(z)
z = z.reshape((len(x), len(y)))
这里是 MCVE:
x = np.arange(5)
y = np.arange(5)
z = np.arange(25).reshape(5, 5)
x1, y1 = np.meshgrid(x, y)
plt.contour(x1, y1, z)
确保您的数据结构如下。
我有列表格式的数据。
看起来像这样:
[(x_1, y_1, Z_1),...(x_i, y_j, z_k),...(x_p, y_q, z_r)]
对于每个 x 和 y,都有一个 z。 X、Y、Z的长度分别为p、q、r(=p*q)
我打算绘制一个等高线图,其中 X 和 Y 为网格,Z 为要绘制的值。
我有如下代码(仅代表):
import csv
import sys
import statistics
import numpy as np
from scipy.interpolate import UnivariateSpline
from matplotlib import pyplot as plt
...........
#format of data = [(x, y, z)......]
#x, y, z are lists
X = [X1,..........,Xp] #length, p
Y = [Y1,..........,Yq] #length, q
Z = [Z1,..........,Zpq] #length, pq
#np.mesh
X1, Y1 = np.meshgrid(X, Y)
plt.figure()
CS = plt.contour(X1, Y1, Z)
plt.clabel(CS, inline=1, fontsize=10)
我收到以下错误:
Traceback (most recent call last):
File "C:/Users/uname/PycharmProjects/waferZoning/contour.py", line 49, in <module>
CS = plt.contour(X1, Y1, Z)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\pyplot.py", line 2766, in contour
ret = ax.contour(*args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\__init__.py", line 1811, in inner
return func(ax, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\axes\_axes.py", line 5640, in contour
return mcontour.QuadContourSet(self, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1428, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 873, in __init__
self._process_args(*args, **kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1445, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1532, in _contour_args
x, y, z = self._check_xyz(args[:3], kwargs)
File "C:\Users\uname\AppData\Local\Programs\Python\Python35\lib\site-packages\matplotlib\contour.py", line 1566, in _check_xyz
raise TypeError("Input z must be a 2D array.")
TypeError: Input z must be a 2D array.
我明白错误是什么,但我无法纠正它。
我不能给出 MWE,但我想我已经很清楚地说明了我的问题。
https://www.dropbox.com/s/33jmfcjzikl4w5g/contour_synthetic.txt?dl=0
您需要一个 z
,其长度等于 x
和 y
的乘积:
assert len(z) == (len(x) * len(y))
制作 z
二维数组:
z = np.array(z)
z = z.reshape((len(x), len(y)))
这里是 MCVE:
x = np.arange(5)
y = np.arange(5)
z = np.arange(25).reshape(5, 5)
x1, y1 = np.meshgrid(x, y)
plt.contour(x1, y1, z)
确保您的数据结构如下。