matplotlib / matplotlib/basemap

contourf on cylindrical projection with irregular latlon grid (tri=True) is calling shiftdata when it shouldn't

Abierto
#492 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
817
Forks
395
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I ran into this problem while trying to plot interpolated data NOT on a regular latlon grid. Orthographic projection works but cylindrical does not.

Relevant code:

fig = plt.figure()
ax = fig.add_subplot(111)
levels = 20
m = Basemap(projection="cyl")  # causes ValueError
# m = Basemap(projection="ortho", lat_0=0., lon_0=0., resolution='l')  # works, does not cause ValueError
MC = m.contourf(lons_deg, lats_deg, vals, levels, ax=ax, tri=True, latlon=True)  # latlon=True interprets first two args as lon and lat respectively

Note that lats_deg, lons_deg, and vals are 1d np arrays with irregular point spacing (no meshgrid). I used tri=True to allow interpolation. This works fine on orthographic projection. But with cylindrical I get the following error:

Traceback (most recent call last):
  File "IcosahedralGeodesicLattice.py", line 146, in <module>
    test_lattice.plot_data(data)
  File "/home/wesley/programming/Mapping/Lattice.py", line 86, in plot_data
    MC = m.contourf(lons_deg, lats_deg, vals, levels, ax=ax, tri=True, latlon=True)  # latlon=True interprets first two args as LON and LAT RESPECTIVELY
  File "/home/wesley/.local/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 544, in with_transform
    fix_wrap_around=plotfunc.__name__ not in ["scatter"])
  File "/home/wesley/.local/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 4797, in shiftdata
    if fix_wrap_around and itemindex:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Looking at the relevant file, the docstring for shiftdata says "Only valid for cylindrical/pseudo-cylindrical global projections and data on regular lat/lon grids. longitudes and data can be 1-d or 2-d, if 2-d it is assumed longitudes are 2nd (rightmost) dimension."

So should it not be being called with tri=True? Sorry if I have misunderstood something, let me know. Thanks!

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en lib/mpl_toolkits/basemap/init.py, siguiendo el wrapper contourf hasta shiftdata y la comprobación de itemindex mostrada en el traceback. Reproduce el ejemplo con una proyección cilíndrica, arrays 1D irregulares, tri=True y latlon=True, y compáralo después con la proyección ortográfica; el trabajo estará terminado cuando el caso cilíndrico ya no produzca el ValueError de array ambiguo y el comportamiento de la cuadrícula regular siga intacto.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
matplotlib, python
Área
data-visualization
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.