class BatchLineCollection(object): def __init__(self, ax): self._ax = ax self._lc = None @property def artists(self): return [self._lc] def draw(self, x, y, **kwargs): segments = [] for x_i, y_i in zip(x, y): xy_i = np.stack([x_i, y_i], axis=1) xy_i = xy_i.reshape(-1, 1, 2) segments_i = np.hstack([xy_i[:-1], xy_i[1:]]) segments.append(segments_i) segments = np.concatenate(segments, axis=0) if self._lc is None: self._lc = PltLineCollection(segments) self._ax.add_collection(self._lc) else: self._lc.set_segments(segments) if 'color' in kwargs: self._lc.set_color(np.reshape(kwargs['color'], [len(segments), -1])) if 'linewidth' in kwargs: self._lc.set_linewidth(kwargs['linewidth']) self._lc.set_joinstyle('round') self._lc.set_capstyle('round')
def test_cap_and_joinstyle_image(): fig, ax = plt.subplots() ax.set_xlim([-0.5, 1.5]) ax.set_ylim([-0.5, 2.5]) x = np.array([0.0, 1.0, 0.5]) ys = np.array([[0.0], [0.5], [1.0]]) + np.array([[0.0, 0.0, 1.0]]) segs = np.zeros((3, 3, 2)) segs[:, :, 0] = x segs[:, :, 1] = ys line_segments = LineCollection(segs, linewidth=[10, 15, 20]) line_segments.set_capstyle("round") line_segments.set_joinstyle("miter") ax.add_collection(line_segments) ax.set_title('Line collection with customized caps and joinstyle')
def test_cap_and_joinstyle_image(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.set_xlim([-0.5, 1.5]) ax.set_ylim([-0.5, 2.5]) x = np.array([0.0, 1.0, 0.5]) ys = np.array([[0.0], [0.5], [1.0]]) + np.array([[0.0, 0.0, 1.0]]) segs = np.zeros((3, 3, 2)) segs[:, :, 0] = x segs[:, :, 1] = ys line_segments = LineCollection(segs, linewidth=[10, 15, 20]) line_segments.set_capstyle("round") line_segments.set_joinstyle("miter") ax.add_collection(line_segments) ax.set_title('Line collection with customized caps and joinstyle')