python-3.x - 使用函数创建 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
我不明白出了什么问题。请求任何可能的帮助。谢谢
解决方案
将网格定义为全局变量可以解决问题!
函数内部field(j)
,写global grid
为第一行
推荐阅读
- typescript - 开玩笑的打字稿 - 模拟日期构造函数
- python - 如何让while循环运行?
- php - 通过 PHP discord oauth2(cookie?)保持登录状态
- cron - 如何在 Plesk 中输入 Mailwizz cron 作业?
- pandas - Pandas - 索引包含缺失条目的 DataFrame 时出现意外结果
- sql - SQL Server 查询过滤器的顺序很慢
- java - 初学者java迭代arraylist方法删除和计数
- python-3.x - 将字典数据表单中的熊猫数据框列解析为每个字典键的新列
- laravel - Laravel - 使用其他策略授权
- c++ - vector::_M_range_check: __n (即 1) >= this->size() (即 1)