我正在尝试绘制包含不同字段和配色方案的4个子图。为此,我创建了函数color,将参数作为要绘制的字段的配色方案和列表位置。颜色导致另一个函数字段,该函数调用要绘制的字段。
代码如下:
w1 =gas['Velocity']
w2 = gas['MagneticField']
w3=gas['Masses']
w4=gas['Density']
nPixels = [300,300]
minMax = [0, header['BoxSize']]
weights=[w1,w2,w3,w4]
def field(j):
grid, _, _, _ = binned_statistic_2d(x, y, weights[j], 'sum', bins=nPixels, range=[minMax,minMax])
fig = plt.figure(figsize=(15,15))
spec = gridspec.GridSpec(ncols=2, nrows=2, figure=fig)
extent = [0, header['BoxSize'], 0, header['BoxSize']]
def colour(c,j):
field(j)
plt.imshow(np.log10(grid), cmap=c,extent=extent, aspect= 1)
plt.colorbar()
f1_ax1 = fig.add_subplot(spec[0, 0])
f1_ax1.set_title('Magnetic Field')
colour('viridis',0)
f1_ax2 = fig.add_subplot(spec[0, 1])
f1_ax2.set_title('Velocity')
colour('inferno',1)
f1_ax3 = fig.add_subplot(spec[1, 0])
f1_ax3.set_title('Masses')
colour('cividis',2)
f1_ax4 = fig.add_subplot(spec[1, 1])
f1_ax4.set_title('Density')
colour('magma',3)
然而,在运行代码I fet时出现以下错误:
ipython-input-8-3f2f0683bc0b> in <module>
11 f1_ax1 = fig.add_subplot(spec[0, 0])
12 f1_ax1.set_title('Magnetic Field')
---> 13 colour('viridis',0)
14
15 f1_ax2 = fig.add_subplot(spec[0, 1])
<ipython-input-8-3f2f0683bc0b> in colour(c, j)
6 def colour(c,j):
7 field(j)
----> 8 plt.imshow(np.log10(grid), cmap=c,extent=extent, aspect= 1)
9 plt.colorbar()
10
NameError: name 'grid' is not defined
我不明白出了什么问题。请求任何可能的帮助。感谢
将网格定义为全局变量解决了这个问题!
在field(j)
函数内,将global grid
写入第一行