diff --git a/CHANGELOG.md b/CHANGELOG.md
index 023cb81..3afab67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@
 
 ### Bug fixes
 
+- Fixed a bug in `set_map_layout`: the data ratio of a cartopy `GeoAxesSubplot` requires
+  a `draw` to be correct ([#61](https://github.com/mathause/mplotutils/pull/61)).
 - Fix a regression introduced in [#33](https://github.com/mathause/mplotutils/pull/33):
   `cyclic_dataarray` now correctly extrapolates the coordinates
   ([#58](https://github.com/mathause/mplotutils/pull/58)).
diff --git a/mplotutils/map_layout.py b/mplotutils/map_layout.py
index 33ce41b..ab620a0 100644
--- a/mplotutils/map_layout.py
+++ b/mplotutils/map_layout.py
@@ -40,6 +40,9 @@ def set_map_layout(axes, width=17.0, *, nrow=None, ncol=None):
     # read figure data
     f = ax.get_figure()
 
+    # getting the correct data ratio of geoaxes requires draw
+    f.canvas.draw()
+
     bottom = f.subplotpars.bottom
     top = f.subplotpars.top
     left = f.subplotpars.left

diff --git a/mplotutils/tests/test_set_map_layout.py b/mplotutils/tests/test_set_map_layout.py
index 83aba3c..0ff4e10 100644
--- a/mplotutils/tests/test_set_map_layout.py
+++ b/mplotutils/tests/test_set_map_layout.py
@@ -195,3 +195,20 @@ def test_set_map_layout_nrow_ncol_only_one_raises():
 
     with pytest.raises(ValueError, match="Must set none or both of 'nrow' and 'ncol'"):
         set_map_layout(None, width=17.0, nrow=None, ncol=1)
+
+
+def test_set_map_layout_cartopy_2_2():
+
+    import cartopy.crs as ccrs
+
+    subplot_kw = {"projection": ccrs.PlateCarree()}
+    with subplots_context(2, 2, subplot_kw=subplot_kw) as (f, axs):
+
+        f.subplots_adjust(hspace=0, wspace=0, top=1, bottom=0, left=0, right=1)
+
+        set_map_layout(axs, width=17)  # width is in cm
+
+        result = f.get_size_inches() * 2.54
+        expected = (17, 8.5)
+
+        np.testing.assert_allclose(result, expected)

aspect ratio requires draw for cartopy maps
The following leads to a wrong figure size:

```
f, axs = plt.subplots(2, 1, subplot_kw=dict(projection=ccrs.Robinson()))
f.subplots_adjust(hspace=0, wspace=0, top=1, bottom=0, left=0, right=1)
mpu.set_map_layout(axs, width=17)  # width is in cm
print("Size (w x h):  ", np.round(f.get_size_inches() * 2.54, 2))
```

cartopy maps seem to require a `f.canvas.draw()` command



mplotutils/tests/test_set_map_layout.py::test_set_map_layout_cartopy_2_2
mplotutils/tests/test_set_map_layout.py::test_set_map_layout_default_width mplotutils/tests/test_set_map_layout.py::test_set_map_layout_no_borders[nrow_ncol0] mplotutils/tests/test_set_map_layout.py::test_set_map_layout_no_borders[nrow_ncol1] mplotutils/tests/test_set_map_layout.py::test_set_map_layout_ax_arr[<lambda>0] mplotutils/tests/test_set_map_layout.py::test_set_map_layout_ax_arr[<lambda>1] mplotutils/tests/test_set_map_layout.py::test_set_map_layout_vert_borders mplotutils/tests/test_set_map_layout.py::test_set_map_layout_horz_borders mplotutils/tests/test_set_map_layout.py::test_set_map_layout_two_axes_vert mplotutils/tests/test_set_map_layout.py::test_set_map_layout_two_axes_horz mplotutils/tests/test_set_map_layout.py::test_set_map_layout_nrow_ncol_only_one_raises