def stacked_bar(data, axes=None, labels=None, lighten_by=0.1, cmap=None, **kwargs): """Create a stacked bar graph Parameters ---------- data : :class:`numpy.ndarray` Array of data, in which each row is a stack, each column a value in that stack. axes : :class:`matplotlib.axes.Axes` or `None`, optional Axes in which to place plot. If `None`, a new figure is generated. (Default: `None`) labels : list, optional Labels for each stack. If `None`, stacks are labeled sequentially by number. (Default: `None`) lighten_by : float, optional Amount by which to lighten sequential blocks in each stack. (Default: 0.10) cmap : :class:`matplotlib.colors.Colormap`, optional Colormap from which to generate bar colors. If supplied, will override any `color` attribute in `**kwargs`. (Default: `None`) **kwargs : keyword arguments Other keyword arguments to pass to :func:`matplotlib.pyplot.bar` Returns ------- :class:`matplotlib.figure.Figure` Parent figure of axes :class:`matplotlib.axes.Axes` Axes containing plot """ fig, ax = get_fig_axes(axes) rows, cols = data.shape labels = labels if labels is not None else range(rows) defaults = [("align", "center"), ("width", 0.8)] if cmap is not None: kwargs["color"] = cmap(numpy.linspace(0, 1.0, num=10)) elif kwargs.get("color", None) is None: kwargs["color"] = [next(get_color_cycle(ax)) for _ in range(rows)] x = numpy.arange(rows) + 0.5 xaxis = ax.xaxis xaxis.set_ticks(x) xaxis.set_ticklabels(labels) bottoms = numpy.zeros(rows) for k, v in defaults: if k not in kwargs: kwargs[k] = v for i in range(cols): color = kwargs["color"] if i > 0: kwargs["color"] = lighten(color, amt=lighten_by) heights = data[:, i] plt.bar(x, heights, bottom=bottoms, **kwargs) heights.shape bottoms += heights ax.set_xlim(-0.5, rows + 0.5) return fig, ax
def stacked_bar(data,axes=None,labels=None,lighten_by=0.1,cmap=None,**kwargs): """Create a stacked bar graph Parameters ---------- data : :class:`numpy.ndarray` Array of data, in which each row is a stack, each column a value in that stack. axes : :class:`matplotlib.axes.Axes` or `None`, optional Axes in which to place plot. If `None`, a new figure is generated. (Default: `None`) labels : list, optional Labels for each stack. If `None`, stacks are labeled sequentially by number. (Default: `None`) lighten_by : float, optional Amount by which to lighten sequential blocks in each stack. (Default: 0.10) cmap : :class:`matplotlib.colors.Colormap`, optional Colormap from which to generate bar colors. If supplied, will override any `color` attribute in `**kwargs`. (Default: `None`) **kwargs : keyword arguments Other keyword arguments to pass to :func:`matplotlib.pyplot.bar` Returns ------- :class:`matplotlib.figure.Figure` Parent figure of axes :class:`matplotlib.axes.Axes` Axes containing plot """ fig, ax = get_fig_axes(axes) rows, cols = data.shape labels = labels if labels is not None else range(rows) defaults = [("align","center"), ("width",0.8)] if cmap is not None: kwargs["color"] = cmap(numpy.linspace(0,1.0,num=10)) elif kwargs.get("color",None) is None: kwargs["color"] = [next(get_color_cycle(ax)) for _ in range(rows)] x = numpy.arange(rows) + 0.5 xaxis = ax.xaxis xaxis.set_ticks(x) xaxis.set_ticklabels(labels) bottoms = numpy.zeros(rows) for k,v in defaults: if k not in kwargs: kwargs[k] = v for i in range(cols): color = kwargs["color"] if i > 0: kwargs["color"] = lighten(color,amt=lighten_by) heights = data[:,i] plt.bar(x,heights,bottom=bottoms,**kwargs) heights.shape bottoms += heights ax.set_xlim(-0.5,rows+0.5) return fig, ax
def kde_plot(data, axes=None, color=None, label=None, alpha=0.7, vert=False, log=False, base=10, points=500, bw_method="scott", rescale=False, zorder=None): """Plot a kernel density estimate of `data` on `axes`. Parameters ---------- data : :class:`numpy.ndarray` Array of data axes : :class:`matplotlib.axes.Axes` or `None`, optional Axes in which to place plot. If `None`, a new figure is generated. (Default: `None`) color : matplotlib colorspec, optional Color to use for plotting (Default: use next in matplotlibrc) label : str, optional Name of data series (used for legend; default: `None`) alpha : float, optional Amount of alpha transparency to use (Default: 0.7) vert : bool, optional If true, plot kde vertically log : bool, optional If `True`, `data` is log-transformed before the kde is estimated. Data are converted back to non-log space afterwards. base : 2, 10, or :obj:`numpy.e`, optional If `log` is `True`, this serves as the base of the log space. If `log` is `False`, this is ignored. (Default: 2) points : int Number of points over which to evaluate kde. (Default: 100) bw_method : str Bandwith estimation method. See documentation for :obj:`scipy.stats.gaussian_kde`. (Default: "scott") Returns ------- :class:`matplotlib.figure.Figure` Parent figure of axes :class:`matplotlib.axes.Axes` Axes containing plot """ fig, axes = get_fig_axes(axes) if color is None: color = next(get_color_cycle(axes)) a, b = get_kde(data, log=log, base=base, points=points, bw_method=bw_method) if rescale == True: b /= b.max() fbargs = {"alpha": alpha, "facecolor": lighten(color), "edgecolor": color} if label is not None: fbargs["label"] = label if vert == True: axes.fill_betweenx(a, b, 0, **fbargs) axes.plot( b, a, color=color, alpha=alpha, label=label ) # this is a bit of a hack to get labels to print; fill_between doesn't work with legends if log == True: axes.semilogy() else: axes.fill_between(a, b, 0, **fbargs) axes.plot(a, b, color=color, alpha=alpha, label=label) if log == True: axes.semilogx() return fig, axes
def kde_plot(data,axes=None,color=None,label=None,alpha=0.7,vert=False, log=False,base=10,points=500,bw_method="scott",rescale=False, zorder=None): """Plot a kernel density estimate of `data` on `axes`. Parameters ---------- data : :class:`numpy.ndarray` Array of data axes : :class:`matplotlib.axes.Axes` or `None`, optional Axes in which to place plot. If `None`, a new figure is generated. (Default: `None`) color : matplotlib colorspec, optional Color to use for plotting (Default: use next in matplotlibrc) label : str, optional Name of data series (used for legend; default: `None`) alpha : float, optional Amount of alpha transparency to use (Default: 0.7) vert : bool, optional If true, plot kde vertically log : bool, optional If `True`, `data` is log-transformed before the kde is estimated. Data are converted back to non-log space afterwards. base : 2, 10, or :obj:`numpy.e`, optional If `log` is `True`, this serves as the base of the log space. If `log` is `False`, this is ignored. (Default: 2) points : int Number of points over which to evaluate kde. (Default: 100) bw_method : str Bandwith estimation method. See documentation for :obj:`scipy.stats.gaussian_kde`. (Default: "scott") Returns ------- :class:`matplotlib.figure.Figure` Parent figure of axes :class:`matplotlib.axes.Axes` Axes containing plot """ fig, axes = get_fig_axes(axes) if color is None: color = next(get_color_cycle(axes)) a, b = get_kde(data,log=log,base=base,points=points,bw_method=bw_method) if rescale == True: b /= b.max() fbargs = { "alpha" : alpha, "facecolor" : lighten(color), "edgecolor" : color } if label is not None: fbargs["label"] = label if vert == True: axes.fill_betweenx(a,b,0,**fbargs) axes.plot(b,a,color=color,alpha=alpha,label=label) # this is a bit of a hack to get labels to print; fill_between doesn't work with legends if log == True: axes.semilogy() else: axes.fill_between(a,b,0,**fbargs) axes.plot(a,b,color=color,alpha=alpha,label=label) if log == True: axes.semilogx() return fig, axes