无法准备轮廓图的数据

时间:2018-05-03 13:35:35

标签: python matplotlib

我想在matplot lib中为一个contourf图绘制一些数据,我想做的事情如下:

x = np.arange(0, 10, 0.5)
y = np.arange(0, 10, 0.5)
z = x**2 - y

fig, ax = plt.subplots()
cs = ax.contourf(x, y, z)

但是这会发出以下错误:

TypeError: Input z must be a 2D array.

有人可以推荐一种方法让我按摩我的数据,使contourf愉快。理想情况下,如果某人也解释了为什么我的数据格式不起作用也会有很大帮助。

注意:我正在使用的实际数据是从数据文件中读取的,除了用c_a,a,Energy分别替换x,y,z之外,它与上面相同。

c_a 
0      1.60
1      1.61
2      1.62
3      1.63
4      1.64
5      1.65
6      1.66
7      1.67
8      1.68
9      1.69
10     1.70
11     1.60
12     1.61
13     1.62
14     1.63
15     1.64
16     1.65
17     1.66
18     1.67
19     1.68
20     1.69
21     1.70
22     1.60
23     1.61
24     1.62
25     1.63
26     1.64
27     1.65
28     1.66
29     1.67
       ... 
91     1.63
92     1.64
93     1.65
94     1.66
95     1.67
96     1.68
97     1.69
98     1.70
99     1.60
100    1.61
101    1.62
102    1.63
103    1.64
104    1.65
105    1.66
106    1.67
107    1.68
108    1.69
109    1.70
110    1.60
111    1.61
112    1.62
113    1.63
114    1.64
115    1.65
116    1.66
117    1.67
118    1.68
119    1.69
120    1.70
Name: c_a, Length: 121, dtype: float64
a 
0      6.00
1      6.00
2      6.00
3      6.00
4      6.00
5      6.00
6      6.00
7      6.00
8      6.00
9      6.00
10     6.00
11     6.01
12     6.01
13     6.01
14     6.01
15     6.01
16     6.01
17     6.01
18     6.01
19     6.01
20     6.01
21     6.01
22     6.02
23     6.02
24     6.02
25     6.02
26     6.02
27     6.02
28     6.02
29     6.02
       ... 
91     6.08
92     6.08
93     6.08
94     6.08
95     6.08
96     6.08
97     6.08
98     6.08
99     6.09
100    6.09
101    6.09
102    6.09
103    6.09
104    6.09
105    6.09
106    6.09
107    6.09
108    6.09
109    6.09
110    6.10
111    6.10
112    6.10
113    6.10
114    6.10
115    6.10
116    6.10
117    6.10
118    6.10
119    6.10
120    6.10
Name: a, Length: 121, dtype: float64
Energy 
0     -250.647503
1     -250.647661
2     -250.647758
3     -250.647791
4     -250.647762
5     -250.647668
6     -250.647511
7     -250.647297
8     -250.647031
9     -250.646721
10    -250.646378
11    -250.647624
12    -250.647758
13    -250.647831
14    -250.647841
15    -250.647788
16    -250.647671
17    -250.647493
18    -250.647258
19    -250.646972
20    -250.646644
21    -250.646282
22    -250.647726
23    -250.647835
24    -250.647884
25    -250.647871
26    -250.647794
27    -250.647655
28    -250.647456
29    -250.647200
          ...    
91    -250.647657
92    -250.647449
93    -250.647182
94    -250.646860
95    -250.646488
96    -250.646071
97    -250.645620
98    -250.645140
99    -250.647896
100   -250.647841
101   -250.647729
102   -250.647559
103   -250.647330
104   -250.647043
105   -250.646702
106   -250.646310
107   -250.645876
108   -250.645407
109   -250.644912
110   -250.647847
111   -250.647769
112   -250.647635
113   -250.647444
114   -250.647193
115   -250.646887
116   -250.646526
117   -250.646116
118   -250.645665
119   -250.645180
120   -250.644669
Name: Energy, Length: 121, dtype: float64

1 个答案:

答案 0 :(得分:2)

x和y也需要为2d(见meshgrid):

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.5)
y = np.arange(0, 10, 0.5)
X, Y = np.meshgrid(x, y)
Z = X**2 - Y

fig, ax = plt.subplots()
cs = ax.contourf(X, Y, Z)
plt.show()

输出:

enter image description here

编辑:

如果您的输入是一维数组,您需要知道如何重塑它。在你的情况下可能是sqrt(length)=11吗? (假设您的域名是正方形的)

import numpy as np
import matplotlib.pyplot as plt

c_a = np.array([np.linspace(1.6, 1.7, num=11) for _ in range(11)]).flatten()
a = np.array([[1.6+i*0.1 for j in range(11)] for i in range(11)]).flatten()
energy = np.array([-250.644-np.random.random()*0.003 for i in range(121)])

x = c_a.reshape((11, 11))
y = a.reshape((11, 11))
z = energy.reshape((11, 11))

fig, ax = plt.subplots()
cs = ax.contourf(x, y, z)
plt.show()

输出:

enter image description here