def _add_scipy_dist_CI(x,y,color,columns,ncells,alpha,dist,theta_star,label=None): ax = plt.gca() xvar, yvar, loc = _get_variables(ax,columns) X,Y = _get_XYgrid(x,y,ncells) data_slice = [] if isinstance(dist, stats._multivariate.multivariate_normal_frozen): for var in theta_star.index: if var == xvar: data_slice.append(X) elif var == yvar: data_slice.append(Y) elif var not in [xvar,yvar]: data_slice.append(np.array([[theta_star[var]]*ncells]*ncells)) data_slice = np.dstack(tuple(data_slice)) elif isinstance(dist, stats.kde.gaussian_kde): for var in theta_star.index: if var == xvar: data_slice.append(X.ravel()) elif var == yvar: data_slice.append(Y.ravel()) elif var not in [xvar,yvar]: data_slice.append(np.array([theta_star[var]]*ncells*ncells)) data_slice = np.array(data_slice) else: return Z = dist.pdf(data_slice) Z = Z.reshape((ncells, ncells)) ax.contour(X,Y,Z, levels=[alpha], colors=color)
def _add_obj_contour(x,y,color,columns,data,theta_star,label=None): ax = plt.gca() xvar, yvar, loc = _get_variables(ax,columns) try: X, Y, Z = _get_data_slice(xvar,yvar,columns,data,theta_star) triang = matplotlib.tri.Triangulation(X, Y) cmap = plt.cm.get_cmap('Greys') plt.tricontourf(triang,Z,cmap=cmap) except: print('Objective contour plot for', xvar, yvar,'slice failed')
def _add_rectangle_CI(x,y,color,columns,lower_bound,upper_bound,label=None): ax = plt.gca() xvar, yvar, loc = _get_variables(ax,columns) xmin = lower_bound[xvar] ymin = lower_bound[yvar] xmax = upper_bound[xvar] ymax = upper_bound[yvar] ax.plot([xmin, xmax], [ymin, ymin], color=color) ax.plot([xmax, xmax], [ymin, ymax], color=color) ax.plot([xmax, xmin], [ymax, ymax], color=color) ax.plot([xmin, xmin], [ymax, ymin], color=color)
def grouped_violinplot(data1, data2, normalize=False, group_names=['data1', 'data2'], filename=None): """ Plot a grouped violinplot to compare two datasets The datasets can be normalized by the median and standard deviation of data1. Parameters ---------- data1: DataFrame Data set, columns = variable names data2: DataFrame Data set, columns = variable names normalize : bool, optional Normalize both datasets by the median and standard deviation of data1 group_names : list, optional Names used in the legend filename: string, optional Filename used to save the figure """ assert isinstance(data1, pd.DataFrame) assert isinstance(data2, pd.DataFrame) assert isinstance(normalize, bool) assert isinstance(group_names, list) assert isinstance(filename, (type(None), str)) data = _get_grouped_data(data1, data2, normalize, group_names) plt.figure() sns.violinplot(data=data, hue='set', y='value', x='columns', order=data1.columns, split=True) plt.gca().legend().set_title('') plt.gca().set_xlabel('') plt.gca().set_ylabel('') if filename is None: plt.show() else: plt.savefig(filename) plt.close()
def _add_scatter(x,y,color,columns,theta_star,label=None): ax = plt.gca() xvar, yvar, loc = _get_variables(ax, columns) ax.scatter(theta_star[xvar], theta_star[yvar], c=color, s=35)