Skip to content

Commit 2bec134

Browse files
authored
Use the xarray pcolormesh to plot grids (#151)
It automatically adjusts the coordinates to match the center of each pixel. Using matplotlib's pcolormesh would result in pixels being off by 0.5*spacing unless we have pixel registered grids (which we don't). Fixes #147
1 parent 578bbd7 commit 2bec134

File tree

9 files changed

+40
-58
lines changed

9 files changed

+40
-58
lines changed

examples/scipygridder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@
7373
ax = plt.axes(projection=ccrs.Mercator())
7474
ax.set_title("Gridded Bathymetry Using Scipy")
7575
# Plot the gridded bathymetry
76-
pc = ax.pcolormesh(
77-
grid.longitude, grid.latitude, grid.bathymetry_m, transform=crs, vmax=0, zorder=-1
76+
pc = grid.bathymetry_m.plot.pcolormesh(
77+
ax=ax, transform=crs, vmax=0, zorder=-1, add_colorbar=False
7878
)
7979
plt.colorbar(pc).set_label("meters")
8080
# Plot the locations of the decimated data

examples/spline.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,8 @@
7171
ax = plt.axes(projection=ccrs.Mercator())
7272
ax.set_title("Air temperature gridded with biharmonic spline")
7373
ax.plot(*coordinates, ".k", markersize=1, transform=ccrs.PlateCarree())
74-
tmp = ax.pcolormesh(
75-
grid.longitude,
76-
grid.latitude,
77-
grid.temperature,
78-
cmap="plasma",
79-
transform=ccrs.PlateCarree(),
74+
tmp = grid.temperature.plot.pcolormesh(
75+
ax=ax, cmap="plasma", transform=ccrs.PlateCarree(), add_colorbar=False
8076
)
8177
plt.colorbar(tmp).set_label("Air temperature (C)")
8278
# Use an utility function to add tick labels and land and ocean features to the map.

examples/spline_weights.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@
9393
ax = axes[1]
9494
ax.set_title("Weighted spline interpolated velocity")
9595
maxabs = vd.maxabs(data.velocity_up) * 1000
96-
pc = ax.pcolormesh(
97-
grid.longitude,
98-
grid.latitude,
99-
grid.velocity * 1000,
96+
pc = (grid.velocity * 1000).plot.pcolormesh(
97+
ax=ax,
10098
cmap="seismic",
10199
vmin=-maxabs,
102100
vmax=maxabs,
103101
transform=crs,
102+
add_colorbar=False,
103+
add_labels=False,
104104
)
105105
cb = plt.colorbar(pc, ax=ax, orientation="horizontal", pad=0.05)
106106
cb.set_label("vertical velocity [mm/yr]")

examples/vector_trend.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@
5757
ax.set_title(title)
5858
# Plot the trend in pseudo color
5959
maxabs = vd.maxabs(component)
60-
tmp = ax.pcolormesh(
61-
component.longitude,
62-
component.latitude,
63-
component.values,
60+
tmp = component.plot.pcolormesh(
61+
ax=ax,
6462
vmin=-maxabs,
6563
vmax=maxabs,
6664
cmap="seismic",
6765
transform=crs,
66+
add_colorbar=False,
67+
add_labels=False,
6868
)
6969
cb = plt.colorbar(tmp, ax=ax, orientation="horizontal", pad=0.05)
7070
cb.set_label("meters/year")

tutorials/chain.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,8 @@
118118
plt.figure(figsize=(7, 6))
119119
ax = plt.axes(projection=ccrs.Mercator())
120120
ax.set_title("Gridded result of the chain")
121-
pc = ax.pcolormesh(
122-
grid.longitude,
123-
grid.latitude,
124-
grid.bathymetry,
125-
transform=ccrs.PlateCarree(),
126-
vmax=0,
127-
zorder=-1,
121+
pc = grid.bathymetry.plot.pcolormesh(
122+
ax=ax, transform=ccrs.PlateCarree(), vmax=0, zorder=-1, add_colorbar=False
128123
)
129124
plt.colorbar(pc).set_label("meters")
130125
vd.datasets.setup_baja_bathymetry_map(ax)
@@ -155,12 +150,8 @@
155150
plt.figure(figsize=(7, 6))
156151
ax = plt.axes(projection=ccrs.Mercator())
157152
ax.set_title("Gridded trend")
158-
pc = ax.pcolormesh(
159-
grid_trend.longitude,
160-
grid_trend.latitude,
161-
grid_trend.bathymetry,
162-
transform=ccrs.PlateCarree(),
163-
zorder=-1,
153+
pc = grid_trend.bathymetry.plot.pcolormesh(
154+
ax=ax, transform=ccrs.PlateCarree(), zorder=-1, add_colorbar=False
164155
)
165156
plt.colorbar(pc).set_label("meters")
166157
vd.datasets.setup_baja_bathymetry_map(ax)

tutorials/model_selection.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@
9999
plt.figure(figsize=(8, 6))
100100
ax = plt.axes(projection=ccrs.Mercator())
101101
ax.set_title("Gridded temperature")
102-
pc = ax.pcolormesh(
103-
grid.longitude,
104-
grid.latitude,
105-
grid.temperature,
102+
pc = grid.temperature.plot.pcolormesh(
103+
ax=ax,
106104
cmap="plasma",
107105
transform=ccrs.PlateCarree(),
106+
add_colorbar=False,
107+
add_labels=False,
108108
)
109109
plt.colorbar(pc).set_label("C")
110110
ax.plot(data.longitude, data.latitude, ".k", markersize=1, transform=ccrs.PlateCarree())
@@ -196,14 +196,14 @@
196196
for i, title, grd in zip(range(2), ["Defaults", "Tuned"], [grid, grid_best]):
197197
ax = plt.subplot(1, 2, i + 1, projection=ccrs.Mercator())
198198
ax.set_title(title)
199-
pc = ax.pcolormesh(
200-
grd.longitude,
201-
grd.latitude,
202-
grd.temperature,
199+
pc = grd.temperature.plot.pcolormesh(
200+
ax=ax,
203201
cmap="plasma",
204202
transform=ccrs.PlateCarree(),
205203
vmin=data.air_temperature_c.min(),
206204
vmax=data.air_temperature_c.max(),
205+
add_colorbar=False,
206+
add_labels=False,
207207
)
208208
plt.colorbar(pc, orientation="horizontal", aspect=50, pad=0.05).set_label("C")
209209
ax.plot(

tutorials/projections.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@
7171

7272
plt.figure(figsize=(7, 6))
7373
plt.title("Gridded bathymetry in Cartesian coordinates")
74-
plt.pcolormesh(grid.easting, grid.northing, grid.bathymetry, cmap="viridis", vmax=0)
75-
plt.colorbar().set_label("bathymetry (m)")
74+
pc = grid.bathymetry.plot.pcolormesh(cmap="viridis", vmax=0, add_colorbar=False)
75+
plt.colorbar(pc).set_label("bathymetry (m)")
7676
plt.plot(filter_coords[0], filter_coords[1], ".k", markersize=0.5)
7777
plt.xlabel("Easting (m)")
7878
plt.ylabel("Northing (m)")
@@ -127,13 +127,8 @@
127127
plt.figure(figsize=(7, 6))
128128
ax = plt.axes(projection=ccrs.Mercator())
129129
ax.set_title("Geographic grid of bathymetry")
130-
pc = ax.pcolormesh(
131-
grid_geo.longitude,
132-
grid_geo.latitude,
133-
grid_geo.bathymetry,
134-
transform=ccrs.PlateCarree(),
135-
vmax=0,
136-
zorder=-1,
130+
pc = grid_geo.bathymetry.plot.pcolormesh(
131+
ax=ax, transform=ccrs.PlateCarree(), vmax=0, zorder=-1, add_colorbar=False
137132
)
138133
plt.colorbar(pc).set_label("meters")
139134
vd.datasets.setup_baja_bathymetry_map(ax, land=None)

tutorials/vectors.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,14 @@
177177
for ax, component, title in zip(axes, components, titles):
178178
ax.set_title(title)
179179
maxabs = vd.maxabs(component)
180-
tmp = ax.pcolormesh(
181-
component.longitude,
182-
component.latitude,
183-
component.values,
180+
tmp = component.plot.pcolormesh(
181+
ax=ax,
184182
vmin=-maxabs,
185183
vmax=maxabs,
186184
cmap="bwr",
187185
transform=crs,
186+
add_colorbar=False,
187+
add_labels=False,
188188
)
189189
cb = plt.colorbar(tmp, ax=ax, orientation="horizontal", pad=0.05)
190190
cb.set_label("meters/year")

tutorials/weights.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,29 +272,29 @@ def plot_data(coordinates, velocity, weights, title_data, title_weights):
272272
ax = axes[0]
273273
ax.set_title("Spline interpolation with weights")
274274
maxabs = vd.maxabs(data.velocity_up)
275-
pc = ax.pcolormesh(
276-
grid.longitude,
277-
grid.latitude,
278-
grid.velocity,
275+
pc = grid.velocity.plot.pcolormesh(
276+
ax=ax,
279277
cmap="seismic",
280278
vmin=-maxabs,
281279
vmax=maxabs,
282280
transform=crs,
281+
add_colorbar=False,
282+
add_labels=False,
283283
)
284284
plt.colorbar(pc, ax=ax, orientation="horizontal", pad=0.05).set_label("m/yr")
285285
ax.plot(data.longitude, data.latitude, ".k", markersize=0.1, transform=crs)
286286
ax.coastlines()
287287
vd.datasets.setup_california_gps_map(ax)
288288
ax = axes[1]
289289
ax.set_title("Spline interpolation without weights")
290-
pc = ax.pcolormesh(
291-
grid_unweighted.longitude,
292-
grid_unweighted.latitude,
293-
grid_unweighted.velocity,
290+
pc = grid_unweighted.velocity.plot.pcolormesh(
291+
ax=ax,
294292
cmap="seismic",
295293
vmin=-maxabs,
296294
vmax=maxabs,
297295
transform=crs,
296+
add_colorbar=False,
297+
add_labels=False,
298298
)
299299
plt.colorbar(pc, ax=ax, orientation="horizontal", pad=0.05).set_label("m/yr")
300300
ax.plot(data.longitude, data.latitude, ".k", markersize=0.1, transform=crs)

0 commit comments

Comments
 (0)