id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 809366777,MDExOlB1bGxSZXF1ZXN0NTc0MjQxMTE3,4915,Better rolling reductions,2448579,closed,0,,,6,2021-02-16T14:37:49Z,2023-04-13T15:46:18Z,2021-02-19T19:44:04Z,MEMBER,,0,pydata/xarray/pulls/4915," Implements most of https://github.com/pydata/xarray/issues/4325#issuecomment-716399575 ``` python %load_ext memory_profiler import numpy as np import xarray as xr temp = xr.DataArray(np.zeros((5000, 500)), dims=(""x"", ""y"")) roll = temp.rolling(x=10, y=20) %memit roll.sum() %memit roll.reduce(np.sum) %memit roll.reduce(np.nansum) # master branch behaviour ``` ``` peak memory: 245.18 MiB, increment: 81.92 MiB peak memory: 226.09 MiB, increment: 62.69 MiB peak memory: 4493.82 MiB, increment: 4330.43 MiB ``` - [x] xref #4325 - [x] asv benchmarks added - [x] Passes `pre-commit run --all-files` - [x] User visible changes (including notable bug fixes) are documented in `whats-new.rst` ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4915/reactions"", ""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 694182591,MDExOlB1bGxSZXF1ZXN0NDgwNTk3OTk3,4407,Dataset.plot.quiver,2448579,closed,0,,,3,2020-09-05T21:04:05Z,2021-02-19T14:21:47Z,2021-02-19T14:21:45Z,MEMBER,,0,pydata/xarray/pulls/4407," - [x] Closes #4373 - [x] Tests added - [x] Passes `isort . && black . && mypy . && flake8` - [x] User visible changes (including notable bug fixes) are documented in `whats-new.rst` - [x] New functions/methods are listed in `api.rst` I could use some help with adding tests and parameter checking if someone wants to help :) ``` python import numpy as np import xarray as xr ds = xr.Dataset() ds.coords[""x""] = (""x"", np.arange(10)) ds.coords[""y""] = (""y"", np.arange(20)) ds.coords[""t""] = (""t"", np.arange(4)) ds[""u""] = np.sin((ds.x - 5) / 5) * np.sin((ds.y - 10) / 10) ds[""v""] = np.sin((ds.x - 5) / 5) * np.cos((ds.y - 10) / 10) ds = ds * 2*np.cos((ds.t) * 2 * 3.14 /0.75) ds[""u""].attrs[""units""] = ""m/s"" ds[""mag""] = np.hypot(ds.u, ds.v) ds.mag.plot(col=""t"", x=""x"") fg = ds.plot.quiver(x=""x"", y=""y"", u=""u"", v=""v"", col=""t"", hue=""mag"") ``` ![image](https://user-images.githubusercontent.com/2448579/92313423-38421880-efbb-11ea-8481-7ad956edf3a9.png) ![image](https://user-images.githubusercontent.com/2448579/92313424-3b3d0900-efbb-11ea-9619-8b9dc242e5e6.png) ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4407/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 685590739,MDU6SXNzdWU2ODU1OTA3Mzk=,4373,Add Dataset.plot.quiver,2448579,closed,0,,,0,2020-08-25T15:39:37Z,2021-02-19T14:21:45Z,2021-02-19T14:21:45Z,MEMBER,,,,"I think it would be nice to add a quiver plot function. I got this far in my current project: ``` python @xarray.plot.dataset_plot._dsplot def quiver(ds, x, y, ax, u, v, **kwargs): from xarray import broadcast if x is None or y is None or u is None or v is None: raise ValueError(""Must specify x, y, u, v for quiver plots."") # matplotlib autoscaling algorithm scale = kwargs.pop(""scale"", None) if scale is None: npts = ds.dims[x] * ds.dims[y] # crude auto-scaling # scale is typical arrow length as a multiple of the arrow width scale = ( 1.8 * ds.to_array().median().values * np.maximum(10, np.sqrt(npts)) ) # / span ds = ds.squeeze() x, y, u, v = broadcast(ds[x], ds[y], ds[u], ds[v]) # no support for these kwargs right now. kwargs.pop(""cmap_params"") kwargs.pop(""hue"") kwargs.pop(""hue_style"") hdl = ax.quiver(x.values, y.values, u.values, v.values, scale=scale, **kwargs) return hdl ``` The autoscaling logic is quite crude; I tried to copy what matplotlib does but got somewhat confused. To get faceting to work properly, we'll need to estimate `scale` around here: https://github.com/pydata/xarray/blob/a36d0a1d4657c848dcdd76d0ecb9c783ad464057/xarray/plot/facetgrid.py#L339-L343","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4373/reactions"", ""total_count"": 4, ""+1"": 4, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue