Skip to content

Commit

Permalink
Use patch glyph to draw Spread and Area
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Dec 21, 2017
1 parent 8b03af9 commit 3cf51e5
Showing 1 changed file with 29 additions and 12 deletions.
41 changes: 29 additions & 12 deletions holoviews/plotting/bokeh/chart.py
Expand Up @@ -479,10 +479,28 @@ def _init_glyph(self, plot, mapping, properties):



class SpreadPlot(ErrorPlot):
class SpreadPlot(ElementPlot):

style_opts = line_properties + fill_properties
_plot_methods = dict(single=Band)
_plot_methods = dict(single='patch')

def get_data(self, element, ranges, style):
mapping = dict(x='x', y='y')
xvals = element.dimension_values(0)
mean = element.dimension_values(1)
neg_error = element.dimension_values(2)
pos_idx = 3 if len(element.dimensions()) > 3 else 2
pos_error = element.dimension_values(pos_idx)

lower = mean - neg_error
upper = mean + pos_error
band_x = np.append(xvals, xvals[::-1])
band_y = np.append(lower, upper[::-1])
if self.invert_axes:
data = dict(x=band_y, y=band_x)
else:
data = dict(x=band_x, y=band_y)
return data, mapping, style



Expand All @@ -498,23 +516,22 @@ def get_extents(self, element, ranges):
ranges[vdim] = (np.nanmin([0, ranges[vdim][0]]), ranges[vdim][1])
return super(AreaPlot, self).get_extents(element, ranges)

def get_data(self, element, ranges, style):
mapping = dict(self._mapping)
if self.static_source:
return {}, mapping, style

def get_data(self, element, ranges, style):
mapping = dict(x='x', y='y')
xs = element.dimension_values(0)
x2 = np.hstack((xs[::-1], xs))

if len(element.vdims) > 1:
lower = element.dimension_values(2)
bottom = element.dimension_values(2)
else:
lower = np.zeros(len(element))
upper = element.dimension_values(1)
data = dict(base=xs, upper=upper, lower=lower)
bottom = np.zeros(len(element))
ys = np.hstack((bottom[::-1], element.dimension_values(1)))

if self.invert_axes:
mapping['dimension'] = 'width'
data = dict(x=ys, y=x2)
else:
mapping['dimension'] = 'height'
data = dict(x=x2, y=ys)
return data, mapping, style


Expand Down

0 comments on commit 3cf51e5

Please sign in to comment.