-1

我正在尝试创建一个等高线图,显示从 1860 年到 1900 年的年度溶解铁浓度,并尝试排除高于一定量(0.000012)的所有值,因为这些值与我的数据丢失的特定区域有关。

下面是我正在使用的脚本,每个单独的部分都有效(在此之前我当然已经导入了所有相关模块)。

dissolved_iron = iris.load_cube('/home/em379/data/dis2/regriddedfiles/HadGEM2-ES_dfe_piControl_r1i1p1_regridded.nc')

dissolved_iron_timeslice = dissolved_iron.extract(iris.Constraint(time = lambda v: 1860 <= v <= 1900))

masked_dissolved_iron_timeslice = ma.masked_greater(dissolved_iron_timeslice.data, 0.000012)

qplt.contourf(masked_dissolved_iron_timeslice,25)

plt.show(block = False)

当我到达 stepqplt.contourf(masked_dissolved_iron_timeslice,25)时,Python 返回错误:

AttributeError: 'numpy.ndarray' object has no attribute 'dim_coords':

>>> qplt.contourf(masked_dissolved_iron_timeslice,25)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/Iris-1.7.0_dev-py2.7.egg/iris/quickplot.py", line 184, in contourf
    result = iplt.contourf(cube, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Iris-1.7.0_dev-py2.7.egg/iris/plot.py", line 579, in contourf
    result = _draw_2d_from_points('contourf', None, cube, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Iris-1.7.0_dev-py2.7.egg/iris/plot.py", line 275, in _draw_2d_from_points
    plot_defn = _get_plot_defn(cube, mode, ndims=2)
  File "/usr/local/lib/python2.7/dist-packages/Iris-1.7.0_dev-py2.7.egg/iris/plot.py", line 127, in _get_plot_defn
    for dim_coord in cube.dim_coords:
AttributeError: 'MaskedArray' object has no attribute 'dim_coords'
4

1 回答 1

1

该错误为我们提供了关于发生了什么的线索:

AttributeError: 'MaskedArray' object has no attribute 'dim_coords'

这对我来说是这样的:“你正试图用 MaskedArray 做一个立方体的事情”。

所以,看看你的代码,确实是这样:

masked_dissolved_iron_timeslice = \
            ma.masked_greater(dissolved_iron_timeslice.data, 0.000012)

masked_dissolved_iron_timeslice现在是一个 numpy 掩码数组而不是iris 立方体。如果您只想查看数据,解决方案是从使用 iris 的绘图功能更改为使用 matplotlib 的:

# Use plt, not qplt:
plt.contourf(masked_dissolved_iron_timeslice, 25)
plt.show()

当然,如果您想要更多上下文(并维护一个多维数据集),您可以使用以下命令更新现有多维数据集的数据:

dissolved_iron_timeslice = ...
dissolved_iron_timeslice.data = \
        ma.masked_greater(dissolved_iron_timeslice.data, 0.000012)

或者,如果您不想修改现有多维数据集:

dissolved_iron_timeslice = ...
ma_iron_t = dissolved_iron_timeslice.copy()
ma_iron_t.data = \
        ma.masked_greater(dissolved_iron_timeslice.data, 0.000012)

使用这些立方体,您可以继续使用 qplt 并获得 Iris 提供的自动标签/颜色条/颜色图/标题。

高温高压

于 2015-02-04T11:31:09.120 回答