7
7
8
8
from ..core .formatting import format_item
9
9
from .utils import (
10
- _determine_cmap_params , _infer_xy_labels , import_matplotlib_pyplot ,
11
- label_from_attrs )
10
+ _infer_xy_labels , _process_cmap_cbar_kwargs ,
11
+ import_matplotlib_pyplot , label_from_attrs )
12
12
13
13
# Overrides axes.labelsize, xtick.major.size, ytick.major.size
14
14
# from mpl.rcParams
@@ -219,32 +219,13 @@ def map_dataarray(self, func, x, y, **kwargs):
219
219
220
220
"""
221
221
222
- cmapkw = kwargs .get ('cmap' )
223
- colorskw = kwargs .get ('colors' )
224
- cbar_kwargs = kwargs .pop ('cbar_kwargs' , {})
225
- cbar_kwargs = {} if cbar_kwargs is None else dict (cbar_kwargs )
226
-
227
222
if kwargs .get ('cbar_ax' , None ) is not None :
228
223
raise ValueError ('cbar_ax not supported by FacetGrid.' )
229
224
230
- # colors is mutually exclusive with cmap
231
- if cmapkw and colorskw :
232
- raise ValueError ("Can't specify both cmap and colors." )
233
-
234
- # These should be consistent with xarray.plot._plot2d
235
- cmap_kwargs = {'plot_data' : self .data .values ,
236
- # MPL default
237
- 'levels' : 7 if 'contour' in func .__name__ else None ,
238
- 'filled' : func .__name__ != 'contour' ,
239
- }
240
-
241
- cmap_args = getfullargspec (_determine_cmap_params ).args
242
- cmap_kwargs .update ((a , kwargs [a ]) for a in cmap_args if a in kwargs )
225
+ cmap_params , cbar_kwargs = _process_cmap_cbar_kwargs (
226
+ func , kwargs , self .data .values )
243
227
244
- cmap_params = _determine_cmap_params (** cmap_kwargs )
245
-
246
- if colorskw is not None :
247
- cmap_params ['cmap' ] = None
228
+ self ._cmap_extend = cmap_params .get ('extend' )
248
229
249
230
# Order is important
250
231
func_kwargs = kwargs .copy ()
@@ -260,7 +241,7 @@ def map_dataarray(self, func, x, y, **kwargs):
260
241
# None is the sentinel value
261
242
if d is not None :
262
243
subset = self .data .loc [d ]
263
- mappable = func (subset , x , y , ax = ax , ** func_kwargs )
244
+ mappable = func (subset , x = x , y = y , ax = ax , ** func_kwargs )
264
245
self ._mappables .append (mappable )
265
246
266
247
self ._cmap_extend = cmap_params .get ('extend' )
@@ -271,36 +252,24 @@ def map_dataarray(self, func, x, y, **kwargs):
271
252
272
253
return self
273
254
274
- def map_dataarray_line (self , x = None , y = None , hue = None , ** kwargs ):
275
- """
276
- Apply a line plot to a 2d facet subset of the data.
277
-
278
- Parameters
279
- ----------
280
- x, y, hue: string
281
- dimension names for the axes and hues of each facet
282
-
283
- Returns
284
- -------
285
- self : FacetGrid object
286
-
287
- """
288
- from .plot import line , _infer_line_data
255
+ def map_dataarray_line (self , func , x , y , ** kwargs ):
256
+ from .plot import _infer_line_data
289
257
290
258
add_legend = kwargs .pop ('add_legend' , True )
291
259
kwargs ['add_legend' ] = False
260
+ func_kwargs = kwargs .copy ()
261
+ func_kwargs ['_labels' ] = False
292
262
293
263
for d , ax in zip (self .name_dicts .flat , self .axes .flat ):
294
264
# None is the sentinel value
295
265
if d is not None :
296
266
subset = self .data .loc [d ]
297
- mappable = line (subset , x = x , y = y , hue = hue ,
298
- ax = ax , _labels = False ,
299
- ** kwargs )
267
+ mappable = func (subset , x = x , y = y , ax = ax , ** func_kwargs )
300
268
self ._mappables .append (mappable )
269
+
301
270
_ , _ , hueplt , xlabel , ylabel , huelabel = _infer_line_data (
302
271
darray = self .data .loc [self .name_dicts .flat [0 ]],
303
- x = x , y = y , hue = hue )
272
+ x = x , y = y , hue = func_kwargs [ ' hue' ] )
304
273
305
274
self ._hue_var = hueplt
306
275
self ._hue_label = huelabel
@@ -520,3 +489,33 @@ def map(self, func, *args, **kwargs):
520
489
self ._finalize_grid (* args [:2 ])
521
490
522
491
return self
492
+
493
+
494
+ def _easy_facetgrid (data , plotfunc , kind , x = None , y = None , row = None ,
495
+ col = None , col_wrap = None , sharex = True , sharey = True ,
496
+ aspect = None , size = None , subplot_kws = None , ** kwargs ):
497
+ """
498
+ Convenience method to call xarray.plot.FacetGrid from 2d plotting methods
499
+
500
+ kwargs are the arguments to 2d plotting method
501
+ """
502
+ ax = kwargs .pop ('ax' , None )
503
+ figsize = kwargs .pop ('figsize' , None )
504
+ if ax is not None :
505
+ raise ValueError ("Can't use axes when making faceted plots." )
506
+ if aspect is None :
507
+ aspect = 1
508
+ if size is None :
509
+ size = 3
510
+ elif figsize is not None :
511
+ raise ValueError ('cannot provide both `figsize` and `size` arguments' )
512
+
513
+ g = FacetGrid (data = data , col = col , row = row , col_wrap = col_wrap ,
514
+ sharex = sharex , sharey = sharey , figsize = figsize ,
515
+ aspect = aspect , size = size , subplot_kws = subplot_kws )
516
+
517
+ if kind == 'line' :
518
+ return g .map_dataarray_line (plotfunc , x , y , ** kwargs )
519
+
520
+ if kind == 'dataarray' :
521
+ return g .map_dataarray (plotfunc , x , y , ** kwargs )
0 commit comments