def _make_plot(self): if self.subplots: self._return_obj = pd.Series(dtype=object) # Re-create iterated data if `by` is assigned by users data = (create_iter_data_given_by(self.data, self._kind) if self.by is not None else self.data) for i, (label, y) in enumerate(self._iter_data(data=data)): ax = self._get_ax(i) kwds = self.kwds.copy() # When by is applied, show title for subplots to know which group it is # just like df.boxplot, and need to apply T on y to provide right input if self.by is not None: y = y.T ax.set_title(pprint_thing(label)) # When `by` is assigned, the ticklabels will become unique grouped # values, instead of label which is used as subtitle in this case. ticklabels = [ pprint_thing(col) for col in self.data.columns.levels[0] ] else: ticklabels = [pprint_thing(label)] ret, bp = self._plot(ax, y, column_num=i, return_type=self.return_type, **kwds) self.maybe_color_bp(bp) self._return_obj[label] = ret self._set_ticklabels(ax, ticklabels) else: y = self.data.values.T ax = self._get_ax(0) kwds = self.kwds.copy() ret, bp = self._plot(ax, y, column_num=0, return_type=self.return_type, **kwds) self.maybe_color_bp(bp) self._return_obj = ret labels = [left for left, _ in self._iter_data()] labels = [pprint_thing(left) for left in labels] if not self.use_index: labels = [pprint_thing(key) for key in range(len(labels))] self._set_ticklabels(ax, labels)
def _make_plot(self): colors = self._get_colors() stacking_id = self._get_stacking_id() # Re-create iterated data if `by` is assigned by users data = (create_iter_data_given_by(self.data, self._kind) if self.by is not None else self.data) for i, (label, y) in enumerate(self._iter_data(data=data)): ax = self._get_ax(i) kwds = self.kwds.copy() label = pprint_thing(label) label = self._mark_right_label(label, index=i) kwds["label"] = label style, kwds = self._apply_style_colors(colors, kwds, i, label) if style is not None: kwds["style"] = style kwds = self._make_plot_keywords(kwds, y) # the bins is multi-dimension array now and each plot need only 1-d and # when by is applied, label should be columns that are grouped if self.by is not None: kwds["bins"] = kwds["bins"][i] kwds["label"] = self.columns kwds.pop("color") y = reformat_hist_y_given_by(y, self.by) # We allow weights to be a multi-dimensional array, e.g. a (10, 2) array, # and each sub-array (10,) will be called in each iteration. If users only # provide 1D array, we assume the same weights is used for all iterations weights = kwds.get("weights", None) if weights is not None and np.ndim(weights) != 1: kwds["weights"] = weights[:, i] artists = self._plot(ax, y, column_num=i, stacking_id=stacking_id, **kwds) # when by is applied, show title for subplots to know which group it is if self.by is not None: ax.set_title(pprint_thing(label)) self._append_legend_handles_labels(artists[0], label)