@@ -580,33 +580,32 @@ def _loss(self, mapping, ival):
580
580
loss = mapping [ival ]
581
581
return finite_loss (ival , loss , self ._scale [0 ])
582
582
583
- def plot (self , * , scatter_or_line = None ):
583
+ def plot (self , * , scatter_or_line = "scatter" ):
584
584
"""Returns a plot of the evaluated data.
585
585
586
+ Parameters
587
+ ----------
588
+ scatter_or_line : str, default: "scatter"
589
+ Plot as a scatter plot ("scatter") or a line plot ("line").
590
+
586
591
Returns
587
592
-------
588
- plot : `holoviews.element.Scatter` (if vdim=1)\
589
- else `holoviews.element.Path`
593
+ plot : `holoviews.Scatter`, `holoviews.Path`, or `holoviews.Overlay`
590
594
Plot of the evaluated data.
591
- scatter_or_line : str, optional
592
- Plot as a scatter plot ("scatter") or a line plot ("line").
593
- By default a line plot will be chosen if the data consists of
594
- vectors, otherwise it is a scatter plot.
595
595
"""
596
+ if scatter_or_line not in ("scatter" , "line" ):
597
+ raise ValueError ("scatter_or_line must be 'scatter' or 'line'" )
596
598
hv = ensure_holoviews ()
597
599
598
600
xs , ys = zip (* sorted (self .data .items ())) if self .data else ([], [])
599
- if self .vdim == 1 :
600
- if scatter_or_line is None or scatter_or_line == "scatter" :
601
- p = hv .Path ([]) * hv .Scatter ((xs , ys ))
602
- else :
603
- p = hv .Path ((xs , ys )) * hv .Scatter ()
604
- else :
605
- if scatter_or_line is None or scatter_or_line == "line" :
606
- p = hv .Path ((xs , ys )) * hv .Scatter ([])
601
+ if scatter_or_line == "scatter" :
602
+ if self .vdim == 1 :
603
+ p = hv .Scatter ((xs , ys ))
607
604
else :
608
605
scatters = [hv .Scatter ((xs , _ys )) for _ys in np .transpose (ys )]
609
- p = hv .Path ([]) * hv .Overlay (scatters )
606
+ p = hv .Overlay (scatters )
607
+ else :
608
+ p = hv .Path ((xs , ys ))
610
609
611
610
# Plot with 5% empty margins such that the boundary points are visible
612
611
margin = 0.05 * (self .bounds [1 ] - self .bounds [0 ])
0 commit comments