html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/5901#issuecomment-953852124,https://api.github.com/repos/pydata/xarray/issues/5901,953852124,IC_kwDOAMm_X8442qDc,30388627,2021-10-28T13:35:59Z,2021-10-28T13:51:24Z,NONE,"@jklymak Thanks for the explanation. > To get the old behaviour you simply need to do pcolormesh(x, y, Z[:-1, :-1], shading='flat') or make x and y one larger than Z in each dimension and specify the the corners of the quadrilaterals. ### Method1: Subset value This method works for the xarray tutorial data, but not for the TROPOMI polar-orbiting satellite data. ``` %matplotlib inline import xarray as xr import cartopy.crs as ccrs import matplotlib.pyplot as plt plt.figure(figsize=(14,6)) ax = plt.axes(projection=ccrs.PlateCarree()) ds = xr.open_dataset('./S5P_OFFL_L2__NO2____20190810T212136_20190810T230306_09456_01_010302_20190816T233944.nc', group='PRODUCT').isel(time=0) m = ax.pcolormesh(ds['longitude'], ds['latitude'], ds['nitrogendioxide_tropospheric_column'][:-1, :-1], # ds['nitrogendioxide_tropospheric_column'], # shading='auto', transform=ccrs.PlateCarree(), vmin=0, vmax=1e-4, cmap='Spectral_r') ``` ![image](https://user-images.githubusercontent.com/30388627/139261298-56eb2d5d-368a-4036-9b9f-d4213b36886f.png) (The TROPOMI example data is uploaded to [Google Drive](https://drive.google.com/drive/folders/1Op3SxIQ_wHNX2GgLGzXqkJhZS64oGdST?usp=sharing)) ### Method2: bounds This issue still exists with bounds data: ``` %matplotlib inline import numpy as np import xarray as xr import cartopy.crs as ccrs import matplotlib.pyplot as plt def prepare_geo(bounds_data): """"""Prepare lat/lon bounds for pcolormesh. lat/lon bounds are ordered in the following way:: 3----2 | | 0----1 Extend longitudes and latitudes with one element to support ""pcolormesh"":: (X[i+1, j], Y[i+1, j]) (X[i+1, j+1], Y[i+1, j+1]) +--------+ | C[i,j] | +--------+ (X[i, j], Y[i, j]) (X[i, j+1], Y[i, j+1]) """""" # Create the left array left = np.vstack([bounds_data[:, :, 0], bounds_data[-1:, :, 3]]) # Create the right array right = np.vstack([bounds_data[:, -1:, 1], bounds_data[-1:, -1:, 2]]) # Stack horizontally dest = np.hstack([left, right]) # Convert to DataArray dest = xr.DataArray(dest, dims=('y_bounds', 'x_bounds'), attrs=bounds_data.attrs ) return dest ds = xr.open_dataset('./S5P_OFFL_L2__NO2____20190810T212136_20190810T230306_09456_01_010302_20190816T233944.nc', group='PRODUCT').isel(time=0) ds_geo = xr.open_dataset('./S5P_OFFL_L2__NO2____20190810T212136_20190810T230306_09456_01_010302_20190816T233944.nc', group='/PRODUCT/SUPPORT_DATA/GEOLOCATIONS').isel(time=0) lon_bounds = prepare_geo(ds_geo['longitude_bounds']) lat_bounds = prepare_geo(ds_geo['latitude_bounds']) plt.figure(figsize=(14,6)) ax = plt.axes(projection=ccrs.PlateCarree()) m = ax.pcolormesh(lon_bounds, lat_bounds, ds['nitrogendioxide_tropospheric_column'], # shading='auto', transform=ccrs.PlateCarree(), vmin=0, vmax=1e-4, cmap='Spectral_r') ``` ![image](https://user-images.githubusercontent.com/30388627/139268959-7456992e-3913-4ab2-8e79-0a14070043da.png) ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1037814301 https://github.com/pydata/xarray/issues/5901#issuecomment-953350140,https://api.github.com/repos/pydata/xarray/issues/5901,953350140,IC_kwDOAMm_X8440vf8,30388627,2021-10-27T22:13:44Z,2021-10-27T22:13:44Z,NONE,"@QuLogic Ha, it looks well with the latest cartopy (0.20.1). Thanks a lot. ![image](https://user-images.githubusercontent.com/30388627/139154696-804f0652-df00-4973-828f-2b447ce8996e.png) @TomNicholas So, is it better to keep this open until the doc is updated?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1037814301 https://github.com/pydata/xarray/issues/5901#issuecomment-953298464,https://api.github.com/repos/pydata/xarray/issues/5901,953298464,IC_kwDOAMm_X8440i4g,30388627,2021-10-27T20:47:18Z,2021-10-27T21:00:46Z,NONE,"@TomNicholas I checked the doc and this issue begins from [v0.16.1](http://xarray.pydata.org/en/v0.16.1/examples/multidimensional-coords.html). Note that there're also small spurious lines after [v0.10.9](http://xarray.pydata.org/en/v0.10.9/examples/multidimensional-coords.html). Before v0.10.9, the figure looks fine. It's may be also related to matplotlib ... CC @jklymak and @timhoffm.","{""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 1, ""rocket"": 0, ""eyes"": 0}",,1037814301 https://github.com/pydata/xarray/issues/5901#issuecomment-953295655,https://api.github.com/repos/pydata/xarray/issues/5901,953295655,IC_kwDOAMm_X8440iMn,30388627,2021-10-27T20:42:58Z,2021-10-27T20:42:58Z,NONE,"BTW, the question on [StackOverflow](https://stackoverflow.com/questions/46527456/preventing-spurious-horizontal-lines-for-ungridded-pcolormesh-data), which was raised by @gerritholl a long time ago, looks similar. I'm not sure whether this is the cartopy issue, CC @QuLogic, and @greglucas.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1037814301