def configure_matplotlib(self): mplrc('savefig', dpi=float(self.figure_resolution_le.text())) mplrc('font', size=float(self.figure_font_size_le.text())) mplrc('text', usetex=self.use_latex_check_box.isChecked()) mplrc('text.latex', unicode=True) mplrc('font', family='serif', serif='Computer Modern Roman')
import os import numpy as np from cycler import cycler from numpy import random as rand from matplotlib import pyplot, cm from histogram import Histogram from matplotlib import rc as mplrc from histogram import rc as histrc mplrc('patch', facecolor='steelblue') mplrc( 'axes', prop_cycle=cycler('color', [ 'steelblue', 'olive', 'darkred', 'goldenrod', 'salmon', 'plum', 'grey' ]), grid=True, facecolor='white', # axes background color ) mplrc('axes.formatter', limits=(-3, 4)) mplrc('image', cmap='cubehelix_r') histrc.plot.baseline = 'left' if not os.path.exists('test_images'): os.mkdir('test_images') def test_plot_hist1d(): npoints = 100000
style. This histogram is then smoothed using a Gaussian filter and plotted as a line. ''' from cycler import cycler import numpy as np from matplotlib import pyplot from histogram import Histogram from matplotlib import rc as mplrc from histogram import rc as histrc # interesting colors mplrc( 'axes', prop_cycle=cycler( 'color', ['steelblue', 'olive', 'darkred', 'darkorchid', 'goldenrod', 'black'])) # default is alpha=0.6, but we want slightly lighter # patches for overlaying many histograms histrc.plot.patch.alpha = 0.5 np.random.seed(1) hh = [] for mean in [2, 5, 7]: hh.append(Histogram(30, [0, 10], 'x (cm)', 'counts', 'Random Data')) hh[-1].fill(np.random.normal(mean, 1, 1000)) fig, ax = pyplot.subplots()
# # Distributed under terms of the MIT license. """ """ from joblib import Parallel, delayed import matplotlib.gridspec as gridspec import numpy as np from lib import anisolib, fabricplotlib from modeltools.lib import fastvtulib from matplotlib.tri import Triangulation import matplotlib.pyplot as plt from glob import glob from matplotlib import rc as mplrc mplrc('font', **{'family': 'sans-serif', 'sans-serif': ['Linux Biolinum O']}) # import os # from mpl_toolkits.axes_grid1.inset_locator import inset_axes fs = 9 bfs = 12 name_fmt = 's_{:s}_rc{:s}_oop{:s}_bm{:s}' name_dict = { 'ftw': 'Converge\nupstream', 'uc': 'Converge\neverywhere', 'hiacc': 'High\naccumulation' }
def hist(rc,ncols=4,figsize=None,alpha=0.2,title=None,tight=False,mins=None,maxs=None,frequency=False,bins=10,ylim=None,printout=True,labels=[],filename=None,fontsize=None,xticks=3): """ Plot histograms of dataset :param ncols: Number of columns in plot matrix :type ncols: int :param figsize: Width and height of figure in inches :type figsize: tuple(fl64,fl64) :param alpha: Histogram color shading :type alpha: float :param title: Title of plot :type title: str :param tight: Use matplotlib tight layout :type tight: bool :param mins: Minimum values of recarray fields :type mins: lst(fl64) :param maxs: Maximum values of recarray fields :type maxs: lst(fl64) :returns: dict(lst(int),lst(fl64)) - dictionary of histogram data (counts,bins) keyed by name :param frequency: If True, the first element of the return tuple will be the counts normalized by the length of data, i.e., n/len(x) :type frequency: bool :param bins: If an integer is given, bins + 1 bin edges are returned. Unequally spaced bins are supported if bins is a list of sequences for each histogram. :type bins: int or lst(lst(int)) :param ylim: y-axis limits for histograms. :type ylim: tuples - 2 element tuple with y limits for histograms :param labels: Names to use instead of parameter names in plot :type labels: lst(str) :param filename: Name of file to save plot. File ending determines plot type (pdf, png, ps, eps, etc.). Plot types available depends on the matplotlib backend in use on the system. Plot will not be displayed. :type filename: str :param fontsize: Size of font :type fontsize: fl64 :param xticks: Number of ticks on xaxes :type xticks: int """ if plotflag: # Set font for scatterplot labels if not fontsize is None: font = {'size': fontsize} mplrc('font', **font) # Add axis labels to first column and last row if len(labels) == 0: labels = rc.dtype.names elif not len(labels) == len(rc.dtype.names): print "Error: number of labels does not match number of parameters" return smp_mins = numpy.min(rc.tolist(),axis=0) smp_maxs = numpy.max(rc.tolist(),axis=0) if mins is None: mins = smp_mins else: mins = [ smp_mins[i] if mins[i] is None else mins[i] for i in range(len(mins)) ] if maxs is None: maxs = smp_maxs else: maxs = [ smp_maxs[i] if maxs[i] is None else maxs[i] for i in range(len(maxs)) ] if numpy.any(numpy.isnan(rc.tolist())): print "Error: Nan values exist probably due to failed simulations. Use subset (e.g. subset([('obs','!=',numpy.nan)]) to remove" return siz = len(rc.dtype) if siz <= ncols: ncols = siz nrows = 1 elif siz > ncols: nrows = int(numpy.ceil(float(siz)/ncols)) else: nrows = 1 if figsize is None: figsize = (ncols*3,nrows*3) fig = plt.figure(figsize=figsize) if mins is None: mins = numpy.min(rc.tolist(),axis=0) if maxs is None: maxs = numpy.max(rc.tolist(),axis=0) hist_dict = OrderedDict() ns = [] ax = [] for ind,nm,mi,ma,lb in zip(range(len(rc.dtype)),rc.dtype.names,mins,maxs,labels): ax.append(plt.subplot(nrows,ncols,ind+1)) if ind==0 or (ind)%ncols==0: if frequency: plt.ylabel('Frequency') else: plt.ylabel('Count') else: ax[-1].get_yaxis().set_visible(False) if frequency: n,b,patches = ax[-1].hist(rc[nm], range=[mi,ma], alpha=alpha, bins=bins, weights=numpy.ones(len(rc[nm])) / len(rc[nm])) hist_dict[nm] = (n,b,patches) else: n,b,patches = ax[-1].hist(rc[nm], range=[mi,ma], alpha=alpha, bins=bins) hist_dict[nm] = (n,b,patches) ax[-1].set_xlim([mi,ma]) ns.append(n) plt.xlabel(lb) plt.locator_params(nbins=4) ax[-1].xaxis.set_major_locator(MaxNLocator(xticks)) # Set ylims of histograms if ylim is None: ymax = max([max(n) for n in ns]) for i in range(len(labels)): ax[i].set_ylim([0,ymax]) else: for i in range(len(labels)): ax[i].set_ylim(ylim) if tight: plt.tight_layout() if title: plt.subplots_adjust(top=0.925) if title: plt.suptitle(title) if filename is None: plt.show() else: fmt = filename.split('.')[-1] plt.savefig(filename,format=fmt) if printout: for nm in hist_dict.keys(): print '\n' print nm+':' if frequency: print ' Freq:', flag=True for n in hist_dict[nm][0]: if flag: print '{:12.2f}'.format(n), flag=False else: print '{:8.2f}'.format(n), #print '{:2f}'.format(n), else: print 'Count:', flag=True for n in hist_dict[nm][0]: if flag: print '{:12.0f}'.format(n), flag=False else: print '{:8.0f}'.format(n), print '\n', print ' Bins:', flag=True for b in hist_dict[nm][1]: if flag: print '{:8.2g}'.format(b), flag=False else: print '{:8.2g}'.format(b), print '\n' return hist_dict else: print "Matplotlib must be installed to plot histograms" return
def panels(rc, type='pearson', alpha=0.2, figsize=None, title=None, tight=False, symbol='.',fontsize=None,corrfontsize=None,ms=None,mins=None,maxs=None,frequency=False,bins=10,ylim=None,labels=[],filename=None,xticks=2,yticks=2): if plotflag: # Set font for scatterplot labels if not fontsize is None: font = {'size': fontsize} mplrc('font', **font) smp_mins = numpy.min(rc.tolist(),axis=0) smp_maxs = numpy.max(rc.tolist(),axis=0) if mins is None: mins = smp_mins else: mins = [ smp_mins[i] if mins[i] is None else mins[i] for i in range(len(mins)) ] if maxs is None: maxs = smp_maxs else: maxs = [ smp_maxs[i] if maxs[i] is None else maxs[i] for i in range(len(maxs)) ] if numpy.any(numpy.isnan(rc.tolist())): print "Error: Nan values exist probably due to failed simulations. Use subset (e.g. subset([('obs','!=',numpy.nan)]) to remove" return siz = len(rc.dtype) fig,ax = plt.subplots(siz,siz,figsize=figsize) ind = 1 # Add axis labels to first column and last row if len(labels) == 0: labels = rc.dtype.names elif not len(labels) == len(rc.dtype.names): print "Error: number of labels does not match number of parameters" return for i,nm in enumerate(labels): ax[i,0].set_ylabel(nm) ax[siz-1,i].set_xlabel(nm) # Plot histograms in diagonal plots ns = [] for i,nm in enumerate(rc.dtype.names): if frequency: n,b,patches = ax[i,i].hist(rc[nm], alpha=alpha, range=(mins[i],maxs[i]), bins=bins, weights=numpy.ones(len(rc[nm])) / len(rc[nm])) else: n,b,patches = ax[i,i].hist(rc[nm], alpha=alpha, range=(mins[i],maxs[i]), bins=bins) ax[i,i].set_xlim([mins[i],maxs[i]]) ns.append(n) # Set ylims of histograms if ylim is None: ymax = max([max(n) for n in ns]) for i in range(len(rc.dtype)): ax[i,i].set_ylim([0,ymax]) else: for i in range(len(rc.dtype)): ax[i,i].set_ylim(ylim) # Scatterplots in lower triangular matrix #if corrfontsize is None: corrfontsize = 2*siz for i,nm1 in enumerate(rc.dtype.names): for j,nm2 in enumerate(rc.dtype.names): if j<i: ax[i,j].plot(rc[nm2],rc[nm1], symbol, ms=ms) ax[i,j].axis([mins[j],maxs[j],mins[i],maxs[i]]) # Print correlation coefficient in upper triangular matrix corrcoef = corr(rc,rc,plot=False,printout=False) for i,nm1 in enumerate(rc.dtype.names): for j,nm2 in enumerate(rc.dtype.names): if j<i: #ax[j,i].axis('off') ax[j,i].text(0.5,0.5,str(numpy.round(corrcoef[j,i],2)),ha='center',va='center',size=corrfontsize,weight='bold') for i,nm1 in enumerate(rc.dtype.names): for j,nm2 in enumerate(rc.dtype.names): if j > 0: ax[i,j].get_yaxis().set_visible(False) else: ax[i,j].yaxis.set_major_locator(MaxNLocator(yticks)) # tk = ax[i,j].get_yticks() # tk = [0.2*(tk[0]+tk[-1]),0.8*(tk[0]+tk[-1])] # ax[i,j].set_yticks(tk) if i < len(rc.dtype)-1: ax[i,j].get_xaxis().set_visible(False) else: ax[i,j].xaxis.set_major_locator(MaxNLocator(xticks)) # tk = ax[i,j].get_xticks() # tk = [0.2*(tk[0]+tk[-1]),0.8*(tk[0]+tk[-1])] # ax[i,j].set_xticks(tk) if tight: plt.tight_layout() if title: plt.subplots_adjust(top=0.925) if title: plt.suptitle(title) if filename is None: plt.show() else: fmt = filename.split('.')[-1] plt.savefig(filename,format=fmt) else: print "Matplotlib must be installed to plot histograms" return
import os import numpy as np from cycler import cycler from numpy import random as rand from matplotlib import pyplot, cm from histogram import Histogram from matplotlib import rc as mplrc from histogram import rc as histrc mplrc('patch',facecolor='steelblue') mplrc('axes', prop_cycle=cycler('color', ['steelblue','olive','darkred','goldenrod','salmon','plum','grey']), grid = True, facecolor = 'white', # axes background color ) mplrc('axes.formatter', limits=(-3,4)) mplrc('image',cmap='cubehelix_r') histrc.plot.baseline = 'left' if not os.path.exists('test_images'): os.mkdir('test_images') def test_plot_hist1d(): npoints = 100000 h1 = Histogram(100,(0,10),'x','y','title') h1.fill(rand.normal(5,2,npoints)) fig,ax = pyplot.subplots(2,2)
The sum of the histograms is plotted using the errorbar style. This histogram is then smoothed using a Gaussian filter and plotted as a line. ''' from cycler import cycler import numpy as np from matplotlib import pyplot from histogram import Histogram from matplotlib import rc as mplrc from histogram import rc as histrc # interesting colors mplrc('axes', prop_cycle=cycler('color', ['steelblue','olive','darkred', 'darkorchid','goldenrod','black'])) # default is alpha=0.6, but we want slightly lighter # patches for overlaying many histograms histrc.plot.patch.alpha = 0.5 np.random.seed(1) hh = [] for mean in [2,5,7]: hh.append(Histogram(30, [0,10], 'x (cm)', 'counts', 'Random Data')) hh[-1].fill(np.random.normal(mean,1,1000)) fig,ax = pyplot.subplots() pts = []