Python 为轮廓图准备数据时遇到问题

Python 为轮廓图准备数据时遇到问题,python,matplotlib,Python,Matplotlib,我想在matplot lib中为轮廓图绘制一些数据,我想做如下操作: 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开心吗。理想情况下,如果有人也能解释

我想在matplot lib中为轮廓图绘制一些数据,我想做如下操作:

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

x和y也需要是2d(请参见):

输出:

编辑:

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

输出:


x和y也需要是二维的(请参见):

输出:

编辑:

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

输出:


和应帮助建议阅读:。和应帮助建议阅读:。这在我的情况下不起作用,因为我直接从文件中读取Z。我不确定当我没有再生它的奢侈时,Z应该采取什么形式将包含9个条目的np.array x转换为3*3 np.array可能您应该发布一个更接近您的问题的示例,x和y在您的案例中是什么样子的?澄清了基础数据。重塑不起作用,因为我需要Z的每个维度保持不变(例如,我需要9->9*9数组而不是9->3*3)查看我的编辑。你的能量输入与你的a_c长度相同,你为什么要将其增加9->9*9?也许我仍然不明白你想要绘制什么。这在我的情况下不起作用,因为我直接从文件中读取Z。我不确定当我没有重新生成Z的奢侈时,Z应该采用什么形式。
x.Reforme(3,3)
将包含9个条目的np.array x转换为3*3 np.array可能您应该发布一个更接近您的问题的示例,在您的案例中x和y是什么样子的?澄清了基础数据。重塑不起作用,因为我需要Z的每个维度保持不变(例如,我需要9->9*9数组而不是9->3*3),请参见我的编辑。你的能量输入与你的a_c长度相同,你为什么要把它增加9->9*9?也许我还是不明白你想策划什么。。
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()
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()