def plot_log(axs, log, info, xticks=None, yticks=None, xnbins=None, ynbins=None, groups=None, show_legends=True, swap_axes=False): """ Plot log data returned by :func:`read_log()` into a specified figure. Parameters ---------- axs : sequence of matplotlib.axes.Axes The list of axes for the log data plots. log : dict The log with data names as keys and ``(xs, ys, vlines)`` as values. info : dict The log plot configuration with subplot numbers as keys. xticks : list of arrays, optional The list of x-axis ticks (array or None) for each subplot. yticks : list of arrays, optional The list of y-axis ticks (array or None) for each subplot. xnbins : list, optional The list of x-axis number of bins (int or None) for each subplot. ynbins : list, optional The list of y-axis number of bins (int or None) for each subplot. groups : list, optional The list of data groups subplots. If not given, all groups are plotted. show_legends : bool If True, show legends in plots. swap_axes : bool If True, swap the axes of the plots. """ import matplotlib.pyplot as plt if axs is None: fig = plt.figure() else: fig = None if groups is None: n_gr = len(info) groups = nm.arange(n_gr) else: n_gr = len(groups) n_col = min(5.0, nm.fix(nm.sqrt(n_gr))) if int(n_col) == 0: n_row = 0 else: n_row = int(nm.ceil(n_gr / n_col)) n_col = int(n_col) if xticks is None: xticks = [None] * n_gr if yticks is None: yticks = [None] * n_gr if xnbins is None: xnbins = [None] * n_gr if ynbins is None: ynbins = [None] * n_gr isub = 0 for ii, (xlabel, ylabel, yscale, names, plot_kwargs) in six.iteritems(info): if ii not in groups: continue if axs is None: ax = fig.add_subplot(n_row, n_col, isub + 1) else: ax = axs[ii] if not swap_axes: xnb, ynb = xnbins[isub], ynbins[isub] xti, yti = xticks[isub], yticks[isub] ax.set_yscale(yscale) for ip, name in enumerate(names): xs, ys, vlines = log[name] draw_data(ax, xs, ys, name, plot_kwargs[ip]) for x in vlines: ax.axvline(x, color='k', alpha=0.3) else: xlabel, ylabel = ylabel, xlabel xti, yti = yticks[isub], xticks[isub] xnb, ynb = ynbins[isub], xnbins[isub] ax.set_xscale(yscale) for ip, name in enumerate(names): xs, ys, vlines = log[name] draw_data(ax, xs, ys, name, plot_kwargs[ip], swap_axes=True) for x in vlines: ax.axhline(x, color='k', alpha=0.3) if xti is not None: ax.set_xticks(xti) if yti is not None: ax.set_yticks(yti) if xnb is not None: ax.locator_params(tight=True, axis='x', nbins=xnb) if ynb is not None: ax.locator_params(tight=True, axis='y', nbins=ynb) if xlabel: ax.set_xlabel(xlabel) if ylabel: ax.set_ylabel(ylabel) if show_legends: ax.legend(loc='best') isub += 1 plt.tight_layout(pad=0.5)