首页 > 解决方案 > 使用函数创建 4 个具有不同字段和配色方案的 matplotlib 子图时出现问题

问题描述

我正在尝试绘制 4 个包含不同字段和配色方案的子图。为此,我创建了函数颜色,以参数作为配色方案和要绘制的字段的列表位置。 颜色导致另一个函数字段调用要绘制的字段。

代码如下:

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)

但是,在运行代码时,我遇到了以下错误:

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

我不明白出了什么问题。请求任何可能的帮助。谢谢

标签: python-3.xlistfunctionmatplotlibparameter-passing

解决方案


将网格定义为全局变量可以解决问题!

函数内部field(j),写global grid为第一行


推荐阅读