def make_pub_scatter_plots(limits, df, angle_label, ax_array=[], symbol='o', i_color=0): if len(ax_array) == 0: fig = plt.figure(figsize=(3, 5)) gs = gridspec.GridSpec(2, 1, left=0.1, right=0.9, wspace=0, hspace=0) ax_array = [plt.subplot(gs[0]), plt.subplot(gs[1])] ax = ax_array[0] x = 'zeta' y = 'epsilon' limit_patch('zeta2', 'epsilon2', limits, ax, b1=2) limit_patch('zeta1', 'epsilon1', limits, ax, b1=1) ax.plot(df[x], df[y], symbol, mec=gwp.qual_color(i_color), mfc='none') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelbottom='off')# , labeltop='on', labelright='on') ax = ax_array[1] x = 'zeta' y = 'alpha' limit_patch('zeta2', 'alpha', limits, ax, b1=2) limit_patch('zeta1', 'alpha', limits, ax, b1=1) ax.plot(df[x][0:-1], df[y][1:], symbol, mec=gwp.qual_color(i_color), mfc='none') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) return ax_array
def compare_average_in_range(dcd_files, MD=True, show=False): fig = plt.figure(figsize=(6, 4)) gs1 = gridspec.GridSpec(1, 1, left=0.075, right=0.75, wspace=0.1, hspace=0, top=0.95) ax1 = plt.subplot(gs1[:, 0]) labels = [ r'$\delta\theta=60$', r'$\delta\theta=50$', r'$\delta\theta=40$', r'$\delta\theta=30$', r'$\delta\theta=20$', r'$\delta\theta=10$', r'$\delta\theta=5$', r'$\delta\theta=1$' ] plt.axhline(95, ls='--', c='DimGray', linewidth=2) all_in_range = [] max_steps = [] min_steps = [] for (i, dcd_file) in enumerate(dcd_files): all_in_range_file = os.path.join( os.path.split(dcd_file)[0], 'average_in_range') if MD: all_in_range_file += '_MD' all_in_range.append(np.loadtxt(all_in_range_file + '.out')) max_steps.append(all_in_range[i][-1, 0]) min_steps.append(all_in_range[i][0, 0]) ax1.plot(all_in_range[i][:, 0], all_in_range[i][:, 1] * 100, '-', c=gwp.qual_color(i), label=labels[i]) ax1.set_xscale('log') x_min = min(min_steps) x_max = min(max_steps) ax1.set_xlim([x_min, x_max]) ax1.set_ylim([73, 102]) ax1.set_ylabel(r'% in Range') ax1.set_xlabel(r'Minimization Iterations') default_fontsize = 12 lg = plt.legend(loc='lower left', scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) lg.draw_frame(False) if show: plt.show() else: save_name = '/home/schowell/data/myData/dihedrals/dsDNA_60bps/average_in_range' if MD: save_name += '_MD' plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'View figure: \nevince %s.eps &' % save_name
def plot_aez_dihedrals(dcd_files, key, max_frame=None, scale_spb=1, used_goback=False, show=False, prefix=None): angle_vs_steps = [] for dcd_file_name in dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' angle_vs_steps.append(np.load(npy_file)) print 'loaded percent of good angles file: %s' % npy_file fig = plt.figure(figsize=(6.5, 10)) gs1 = gridspec.GridSpec(3, 1, left=0.1, right=0.75, wspace=0, hspace=0) angle_labels = ['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'chi'] plot_order = [1, 5, 6] # only plot alpha, beta, and gamma default_fontsize = 12 for (i, i_angle) in enumerate(plot_order): ax1 = plt.subplot(gs1[i]) x_max = [] for j in xrange(len(dcd_files)): ax1.plot(angle_vs_steps[j][:, 0], angle_vs_steps[j][:, i_angle], '-', c=gwp.qual_color(j), label=key[j]) x_max.append(angle_vs_steps[j][-1, 0]) ax1.set_ylim([0, 1.1]) ax1.set_ylabel(r'% in range') ax1.set_xlim([0, min(x_max)]) if i < len(plot_order) - 1: ax1.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax1.set_xlabel(r'steps per bp') if i == 0: lg = plt.legend(loc='upper left', bbox_to_anchor=(1, 1), scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) ax1.set_title(angle_labels[i_angle-1], y=0.05) if show: plt.show() else: save_name = 'dsDNA_60bps/moved_in_range' if prefix: save_name = save_name + '_' + prefix if max_frame: save_name += '_' + str(max_frame) plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'saved figures to %s.eps and %s.png' % (save_name, save_name) print 'done plotting'
def make_pub_scatter_plots(limits, df, angle_label, ax_array=[], symbol='o', i_color=0): if len(ax_array) == 0: fig = plt.figure(figsize=(3, 5)) gs = gridspec.GridSpec(2, 1, left=0.1, right=0.9, wspace=0, hspace=0) ax_array = [plt.subplot(gs[0]), plt.subplot(gs[1])] ax = ax_array[0] x = 'zeta' y = 'epsilon' limit_patch('zeta2', 'epsilon2', limits, ax, b1=2) limit_patch('zeta1', 'epsilon1', limits, ax, b1=1) ax.plot(df[x], df[y], symbol, mec=gwp.qual_color(i_color), mfc='none') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelbottom='off') # , labeltop='on', labelright='on') ax = ax_array[1] x = 'zeta' y = 'alpha' limit_patch('zeta2', 'alpha', limits, ax, b1=2) limit_patch('zeta1', 'alpha', limits, ax, b1=1) ax.plot(df[x][0:-1], df[y][1:], symbol, mec=gwp.qual_color(i_color), mfc='none') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) return ax_array
def compare_average_in_range(dcd_files, MD=True, show=False): fig = plt.figure(figsize=(6, 4)) gs1 = gridspec.GridSpec(1, 1, left=0.075, right=0.75, wspace=0.1, hspace=0, top=0.95) ax1 = plt.subplot(gs1[:, 0]) labels = [r'$\delta\theta=60$', r'$\delta\theta=50$', r'$\delta\theta=40$', r'$\delta\theta=30$', r'$\delta\theta=20$', r'$\delta\theta=10$', r'$\delta\theta=5$', r'$\delta\theta=1$'] plt.axhline(95, ls='--', c='DimGray', linewidth=2) all_in_range = [] max_steps = [] min_steps = [] for (i, dcd_file) in enumerate(dcd_files): all_in_range_file = os.path.join(os.path.split(dcd_file)[0], 'average_in_range') if MD: all_in_range_file += '_MD' all_in_range.append(np.loadtxt(all_in_range_file + '.out')) max_steps.append(all_in_range[i][-1, 0]) min_steps.append(all_in_range[i][0, 0]) ax1.plot(all_in_range[i][:, 0], all_in_range[i][:, 1]*100, '-', c=gwp.qual_color(i), label=labels[i]) ax1.set_xscale('log') x_min = min(min_steps) x_max = min(max_steps) ax1.set_xlim([x_min, x_max]) ax1.set_ylim([73, 102]) ax1.set_ylabel(r'% in Range') ax1.set_xlabel(r'Minimization Iterations') default_fontsize = 12 lg = plt.legend(loc='lower left', scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) lg.draw_frame(False) if show: plt.show() else: save_name = '/home/schowell/data/myData/dihedrals/dsDNA_60bps/average_in_range' if MD: save_name += '_MD' plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'View figure: \nevince %s.eps &' % save_name
def show_ncp_geometry(all_ncp_plot_vars): import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import x_dna.util.gw_plot as gwp fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(111, projection='3d') n_ncps = len(all_ncp_plot_vars) axis_mag = [90, 130] i = 0 all_origins = [all_ncp_plot_vars[i].ncp_origin for i in xrange(n_ncps)] all_origins = np.array(all_origins) ncp_colors = [gwp.qual_color(0), gwp.qual_color(6), gwp.qual_color(8), gwp.qual_color(2)] axes_colors = [gwp.qual_color(9), gwp.qual_color(1)] limits = [] for i in xrange(n_ncps): ncp_origin = all_ncp_plot_vars[i].ncp_origin ncp_axes = all_ncp_plot_vars[i].ncp_axes # NCP axes labels = ['Cylinder Axes', 'Dyad Axes'] for (j, axis) in enumerate(ncp_axes[[2, 0]]): axes_vec = np.vstack((axis * (-axis_mag[j] / 2) + ncp_origin, axis * (axis_mag[j] / 2) + ncp_origin)) limits.append(axes_vec) if i == 0: ax.plot(axes_vec[:, 0], axes_vec[:, 1], axes_vec[:, 2], c=axes_colors[j], label=labels[j], linewidth=3) ncp1_o = all_ncp_plot_vars[i].ncp_origin if j == 1: ncp2_o = all_ncp_plot_vars[i + 2].ncp_origin stack_axis = ncp2_o - ncp1_o stack_axis = stack_axis / \ np.sqrt(stack_axis.dot(stack_axis)) stack_vec = np.vstack((stack_axis * (-axis_mag[1] / 2) + ncp1_o, stack_axis * (axis_mag[1] / 2) + ncp2_o)) limits.append(stack_vec) ax.plot(stack_vec[:, 0], stack_vec[:, 1], stack_vec[:, 2], c=gwp.qual_color(4), linewidth=3, label='Stack Axes') ax.plot(all_origins[:, 0], all_origins[:, 1], all_origins[:, 2], linewidth=2, c=gwp.qual_color(3), label='Center-to-Center Segments') else: ax.plot(axes_vec[:, 0], axes_vec[:, 1], axes_vec[:, 2], c=axes_colors[j], linewidth=3) center = np.array(all_origins).mean(axis=0) ax.plot([center[0]], [center[1]], [center[2]], marker='*', c=gwp.qual_color(7), ms=10, label='Array Center', linestyle='None') for i in xrange(n_ncps): coor = all_ncp_plot_vars[i].coor # plot the coordinates the cylinder was fit to coor_label = "NCP %d" % (i + 1) ax.plot(coor[:, 0], coor[:, 1], coor[:, 2], 'k', linewidth=5) ax.plot(coor[:, 0], coor[:, 1], coor[:, 2], c=ncp_colors[i], linewidth=4, label=coor_label) i = 1 ncp1_o = all_ncp_plot_vars[i].ncp_origin ncp2_o = all_ncp_plot_vars[i + 2].ncp_origin stack_axis = ncp2_o - ncp1_o stack_axis = stack_axis / np.sqrt(stack_axis.dot(stack_axis)) stack_vec = np.vstack((stack_axis * (-axis_mag[0] / 2) + ncp1_o, stack_axis * (axis_mag[0] / 2) + ncp2_o)) limits.append(stack_vec) ax.plot(stack_vec[:, 0], stack_vec[:, 1], stack_vec[:, 2], c=gwp.qual_color(4), linewidth=3) limits = np.array(limits).reshape(len(limits) * 2, 3) extent = (limits.max(axis=0) - limits.min(axis=0)).max() / 2 ax.set_xlim([center[0] - extent, center[0] + extent]) ax.set_ylim([center[1] - extent, center[1] + extent]) ax.set_zlim([center[2] - extent, center[2] + extent]) # DO NOT RESIZE THE IMAGE: it messes up the scale # Shrink current axis by 40% so the legend is visible box = ax.get_position() ax.set_position([box.x0, box.y0, box.width * 0.7, box.height]) # Put a legend ax.set_axis_off() # plt.title('Nucleosome Array Geometry Definitions') lg = plt.legend(loc='upper left', numpoints=1, bbox_to_anchor=(1, 0.5)) lg.draw_frame(False) plt.show() return
def show_ncp_geometry(all_ncp_plot_vars): import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import x_dna.util.gw_plot as gwp fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(111, projection='3d') n_ncps = len(all_ncp_plot_vars) axis_mag = [90, 130] i = 0 all_origins = [all_ncp_plot_vars[i].ncp_origin for i in xrange(n_ncps)] all_origins = np.array(all_origins) ncp_colors = [ gwp.qual_color(0), gwp.qual_color(6), gwp.qual_color(8), gwp.qual_color(2) ] axes_colors = [gwp.qual_color(9), gwp.qual_color(1)] limits = [] for i in xrange(n_ncps): ncp_origin = all_ncp_plot_vars[i].ncp_origin ncp_axes = all_ncp_plot_vars[i].ncp_axes # NCP axes labels = ['Cylinder Axes', 'Dyad Axes'] for (j, axis) in enumerate(ncp_axes[[2, 0]]): axes_vec = np.vstack((axis * (-axis_mag[j] / 2) + ncp_origin, axis * (axis_mag[j] / 2) + ncp_origin)) limits.append(axes_vec) if i == 0: ax.plot(axes_vec[:, 0], axes_vec[:, 1], axes_vec[:, 2], c=axes_colors[j], label=labels[j], linewidth=3) ncp1_o = all_ncp_plot_vars[i].ncp_origin if j == 1: ncp2_o = all_ncp_plot_vars[i + 2].ncp_origin stack_axis = ncp2_o - ncp1_o stack_axis = stack_axis / \ np.sqrt(stack_axis.dot(stack_axis)) stack_vec = np.vstack( (stack_axis * (-axis_mag[1] / 2) + ncp1_o, stack_axis * (axis_mag[1] / 2) + ncp2_o)) limits.append(stack_vec) ax.plot(stack_vec[:, 0], stack_vec[:, 1], stack_vec[:, 2], c=gwp.qual_color(4), linewidth=3, label='Stack Axes') ax.plot(all_origins[:, 0], all_origins[:, 1], all_origins[:, 2], linewidth=2, c=gwp.qual_color(3), label='Center-to-Center Segments') else: ax.plot(axes_vec[:, 0], axes_vec[:, 1], axes_vec[:, 2], c=axes_colors[j], linewidth=3) center = np.array(all_origins).mean(axis=0) ax.plot([center[0]], [center[1]], [center[2]], marker='*', c=gwp.qual_color(7), ms=10, label='Array Center', linestyle='None') for i in xrange(n_ncps): coor = all_ncp_plot_vars[i].coor # plot the coordinates the cylinder was fit to coor_label = "NCP %d" % (i + 1) ax.plot(coor[:, 0], coor[:, 1], coor[:, 2], 'k', linewidth=5) ax.plot(coor[:, 0], coor[:, 1], coor[:, 2], c=ncp_colors[i], linewidth=4, label=coor_label) i = 1 ncp1_o = all_ncp_plot_vars[i].ncp_origin ncp2_o = all_ncp_plot_vars[i + 2].ncp_origin stack_axis = ncp2_o - ncp1_o stack_axis = stack_axis / np.sqrt(stack_axis.dot(stack_axis)) stack_vec = np.vstack((stack_axis * (-axis_mag[0] / 2) + ncp1_o, stack_axis * (axis_mag[0] / 2) + ncp2_o)) limits.append(stack_vec) ax.plot(stack_vec[:, 0], stack_vec[:, 1], stack_vec[:, 2], c=gwp.qual_color(4), linewidth=3) limits = np.array(limits).reshape(len(limits) * 2, 3) extent = (limits.max(axis=0) - limits.min(axis=0)).max() / 2 ax.set_xlim([center[0] - extent, center[0] + extent]) ax.set_ylim([center[1] - extent, center[1] + extent]) ax.set_zlim([center[2] - extent, center[2] + extent]) # DO NOT RESIZE THE IMAGE: it messes up the scale # Shrink current axis by 40% so the legend is visible box = ax.get_position() ax.set_position([box.x0, box.y0, box.width * 0.7, box.height]) # Put a legend ax.set_axis_off() # plt.title('Nucleosome Array Geometry Definitions') lg = plt.legend(loc='upper left', numpoints=1, bbox_to_anchor=(1, 0.5)) lg.draw_frame(False) plt.show() return
def make_selected_scatter_plots(limits, df, angle_label, ax_array=[], symbol='x', i_color=0): if len(ax_array) == 0: fig, ax_array = plt.subplots(3, 3) ax = ax_array[0, 0] x = 'zeta' y = 'alpha' limit_patch('zeta1', 'alpha', limits, ax) limit_patch('zeta2', 'alpha', limits, ax) ax.plot(df[x][0:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelbottom='off') # , labeltop='on') ax = ax_array[0, 1] x = 'zeta' y = 'beta' limit_patch('zeta1', 'beta1', limits, ax) limit_patch('zeta1', 'beta2', limits, ax) limit_patch('zeta2', 'beta1', limits, ax) limit_patch('zeta2', 'beta2', limits, ax) ax.plot(df[x][0:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelleft='off', labelbottom='off') # , labeltop='on') ax = ax_array[0, 2] x = 'zeta' y = 'epsilon' limit_patch('zeta1', 'epsilon1', limits, ax) limit_patch('zeta2', 'epsilon2', limits, ax) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params( labelleft='off', labelbottom='off')# , labeltop='on', labelright='on') ax = ax_array[1, 0] x = 'alpha' y = 'gamma' limit_patch('alpha', 'gamma', limits, ax) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelbottom='off') ax = ax_array[1, 1] x = 'zeta' y = 'chi' limit_patch('zeta1', 'chi1pu', limits, ax) limit_patch('zeta1', 'chi1py', limits, ax) limit_patch('zeta2', 'chi2', limits, ax) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelleft='off', labelbottom='off') ax = ax_array[1, 2] x = 'delta' y = 'chi' limit_patch('delta1', 'chi1pu', limits, ax) limit_patch('delta1', 'chi1py', limits, ax) limit_patch('delta2', 'chi2', limits, ax) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) # , labelright='on') ax.tick_params(labelleft='off', labelbottom='off') ax = ax_array[2, 0] x = 'zeta' y = 'zeta' limit_patch('zeta1', 'zeta1', limits, ax) limit_patch('zeta1', 'zeta2', limits, ax) limit_patch('zeta2', 'zeta1', limits, ax) # limit_patch('zeta2', 'zeta2', limits, ax) ax.plot(df[x][:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax = ax_array[2, 1] x = 'epsilon' y = 'epsilon' limit_patch('epsilon1', 'epsilon1', limits, ax) limit_patch('epsilon1', 'epsilon2', limits, ax) limit_patch('epsilon2', 'epsilon1', limits, ax) # limit_patch('epsilon2', 'epsilon2', limits, ax) ax.plot(df[x][:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelleft='off') ax = ax_array[2, 2] x = 'zeta' y = 'delta' limit_patch('zeta1', 'delta1', limits, ax) limit_patch('zeta2', 'delta2', limits, ax) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.tick_params(labelleft='off') # , labelright='on') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) return ax_array
def compare_min_dihedrals(raw_dcd_files, min_dcd_files, key, max_frame=None, scale_spb=1, used_goback=False, show=False, prefix=None): raw_angle_vs_steps = [] min_angle_vs_steps = [] raw_all_in_range = [] min_all_in_range = [] for dcd_file_name in min_dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' try: if 'MD' in prefix: npy_file = npy_file.replace('.npy', '_MD.npy') all_in_range_file += '_MD' except: pass min_angle_vs_steps.append(np.load(npy_file)) min_all_in_range.append(np.loadtxt(all_in_range_file + '.out')) print 'loaded percent in range files: \n%s \n%s' % (npy_file, all_in_range_file) for dcd_file_name in raw_dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' try: if 'MD' in prefix: npy_file = npy_file.replace('.npy', '_MD.npy') all_in_range_file += '_MD' except: pass raw_angle_vs_steps.append(np.load(npy_file)) raw_all_in_range.append(np.loadtxt(all_in_range_file + '.out')) print 'loaded percent in range files: \n%s \n%s' % (npy_file, all_in_range_file) fig = plt.figure(figsize=(5, 12)) gs = gridspec.GridSpec(8, 2, left=0.1, right=0.75, wspace=0.07, hspace=0) angle_labels = [r'$\alpha$', r'$\beta$', r'$\gamma$', r'$\delta$', r'$\epsilon$', r'$\zeta$', r'$\chi$', r'All'] plot_order = [0, 2, 3, 4, 7, 1, 5, 6] # change to show select angles default_fontsize = 12 def plot_settings(ax, x_min, x_max): ax.set_ylim([71, 104]) ax.set_xscale('log') ax.set_xlim([min(x_min), min(x_max)]) for (i, i_angle) in enumerate(plot_order): ax = plt.subplot(gs[i, 0]) plt.axhline(95, ls='--', c='DimGray', linewidth=2) x_max = [] x_min = [] for j in xrange(len(raw_dcd_files)): if i_angle == 0: ax.plot(raw_all_in_range[j][:, 0], raw_all_in_range[j][:, 1]*100, '-', c=gwp.qual_color(j), label=key[j]) x_max.append(raw_all_in_range[j][-1, 0]) x_min.append(raw_all_in_range[j][0, 0]) ax.text(18, 107, 'Raw') else: ax.plot(raw_angle_vs_steps[j][:, 0], raw_angle_vs_steps[j][:, i_angle]*100, '-', c=gwp.qual_color(j), label=key[j]) x_max.append(raw_angle_vs_steps[j][-1, 0]) x_min.append(raw_angle_vs_steps[j][0, 0]) plot_settings(ax, x_min, x_max) ax.set_ylabel(r'% in range') if i < len(plot_order) - 1: ax.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax.set_xlabel(r'steps per bp') ax.set_title(angle_labels[i_angle-1], y=0.03, x=0.12) for (i, i_angle) in enumerate(plot_order): ax = plt.subplot(gs[i, 1]) plt.axhline(95, ls='--', c='DimGray', linewidth=2) for j in xrange(len(min_dcd_files)): if i_angle == 0: ax.plot(min_all_in_range[j][:, 0], min_all_in_range[j][:, 1]*100, '-', c=gwp.qual_color(j), label=key[j]) ax.text(9, 107, 'Minimized') else: ax.plot(min_angle_vs_steps[j][:, 0], min_angle_vs_steps[j][:, i_angle]*100, '-', c=gwp.qual_color(j), label=key[j]) plot_settings(ax, x_min, x_max) ax.yaxis.set_ticklabels([]) if i < len(plot_order) - 1: ax.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax.set_xlabel(r'steps per bp') ax.set_title(angle_labels[i_angle-1], y=0.03, x=0.12) if i == 0: lg = plt.legend(loc='upper left', bbox_to_anchor=(1, 1), scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) path = 'dsDNA_60bps/' save_name = 'raw_min_percent_in_range' if prefix: save_name = prefix + '_' + save_name if max_frame: save_name += '_' + str(max_frame) plt.savefig(path + save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(path + save_name + '.png', dpi=400, bbox_inches='tight') print 'saved figures to %s.eps and %s.png' % (save_name, save_name) if show: plt.show() print 'done plotting'
def make_selected_scatter_plots(limits, df, angle_label, ax_array=[], symbol='x', i_color=0): if len(ax_array) == 0: fig, ax_array = plt.subplots(3, 3) ax = ax_array[0, 0] x = 'zeta' y = 'alpha' limit_patch('zeta1', 'alpha', limits, ax, b1=1) limit_patch('zeta2', 'alpha', limits, ax, b1=2) ax.plot(df[x][0:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelbottom='off') # , labeltop='on') ax = ax_array[0, 1] x = 'zeta' y = 'beta' limit_patch('zeta1', 'beta1', limits, ax, b1=1) limit_patch('zeta1', 'beta2', limits, ax, b1=3) limit_patch('zeta2', 'beta1', limits, ax, b1=3) limit_patch('zeta2', 'beta2', limits, ax, b1=2) ax.plot(df[x][0:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelleft='off', labelbottom='off') # , labeltop='on') ax = ax_array[0, 2] x = 'zeta' y = 'epsilon' limit_patch('zeta1', 'epsilon1', limits, ax, b1=1) limit_patch('zeta2', 'epsilon2', limits, ax, b1=2) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelleft='off', labelbottom='off') # , labeltop='on', labelright='on') ax = ax_array[1, 0] x = 'alpha' y = 'gamma' limit_patch('alpha', 'gamma', limits, ax, b1=1) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelbottom='off') ax = ax_array[1, 1] x = 'zeta' y = 'chi' limit_patch('zeta1', 'chi1pu', limits, ax, b1=1) limit_patch('zeta1', 'chi1py', limits, ax, b1=1) limit_patch('zeta2', 'chi2', limits, ax, b1=2) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) ax.tick_params(labelleft='off', labelbottom='off') ax = ax_array[1, 2] x = 'delta' y = 'chi' limit_patch('delta1', 'chi1pu', limits, ax, b1=1) limit_patch('delta1', 'chi1py', limits, ax, b1=1) limit_patch('delta2', 'chi2', limits, ax, b1=2) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) # , labelright='on') ax.tick_params(labelleft='off', labelbottom='off') ax = ax_array[2, 0] x = 'zeta' y = 'zeta' limit_patch('zeta1', 'zeta1', limits, ax, b1=1) limit_patch('zeta1', 'zeta2', limits, ax, b1=3) limit_patch('zeta2', 'zeta1', limits, ax, b1=3) # limit_patch('zeta2', 'zeta2', limits, ax, b1=True) ax.plot(df[x][:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax = ax_array[2, 1] x = 'epsilon' y = 'epsilon' limit_patch('epsilon1', 'epsilon1', limits, ax, b1=1) limit_patch('epsilon1', 'epsilon2', limits, ax, b1=3) limit_patch('epsilon2', 'epsilon1', limits, ax, b1=3) # limit_patch('epsilon2', 'epsilon2', limits, ax, b1=True) ax.plot(df[x][:-1], df[y][1:], symbol, c=gwp.qual_color(i_color)) ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y] + ' + 1') plt_format(ax) ax.tick_params(labelleft='off') ax = ax_array[2, 2] x = 'zeta' y = 'delta' limit_patch('zeta1', 'delta1', limits, ax, b1=True) limit_patch('zeta2', 'delta2', limits, ax, b1=True) ax.plot(df[x], df[y], symbol, c=gwp.qual_color(i_color)) ax.tick_params(labelleft='off') # , labelright='on') ax.set_xlabel(angle_label[x]) ax.set_ylabel(angle_label[y]) plt_format(ax) return ax_array
def plot_good_dihedrals(dcd_file_name, max_frame=None, scale_spb=1, used_goback=False, show=False, MD=True): if MD: if max_frame: npy_file = dcd_file_name[:-4] + '_MD_%d.npy' % max_frame else: npy_file = dcd_file_name[:-4] + '_MD.npy' else: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-4] + '.npy' try: angle_vs_steps = np.load(npy_file) print 'loaded percent of good angles file: %s' % npy_file except: print 'failed to load percent of good angles file: %s' % npy_file angles = pd.read_hdf(dcd_file_name[:-3] + 'hdf', 'angles') angles['-90'] = np.abs(-90 - (angles['epsilon'] - angles['zeta'])) angles['+90'] = np.abs(90 - (angles['epsilon'] - angles['zeta'])) angles['min'] = angles.loc[:, ['+90', '-90']].min(axis=1) angles['B-type'] = 'B' angles.loc[angles['min'] == angles['+90'], 'B-type'] = 'BII' angles.loc[angles['min'] == angles['-90'], 'B-type'] = 'BI' try: scale_spb == 1 # enforce there is not a scale all_spb = np.loadtxt(dcd_file_name[:-3] + 'spb') print('loaded steps/bead file: %s' % (dcd_file_name[:-3] + 'spb')) except: print( 'failed to load steps/bead file: %s \n' 'using %f step/s between frames' % (dcd_file_name[:-3] + 'spb', scale_spb)) all_spb = np.unique(angles['frame']) all_spb = all_spb.reshape(len(all_spb), 1) all_spb = np.concatenate((all_spb, all_spb * scale_spb), axis=1) if max_frame: nf = max_frame else: nf = len(all_spb) spb, indices = np.unique(all_spb[:nf, 1], return_inverse=True) n_steps = len(spb) angle_vs_steps = np.zeros((n_steps, 8)) # 7 angles angle_vs_steps[:, 0] = spb if MD: limit_file = ('/home/schowell/data/myData/dihedrals/' 'dsDNA_60bps/md_angles.txt') else: limit_file = ('/home/schowell/data/myData/dihedrals/' 'dsDNA_60bps/dna_angles.txt') limits = pd.read_csv(limit_file, index_col=0) limits['low'] = limits['mean'] - 2 * limits['sd'] limits['high'] = limits['mean'] + 2 * limits['sd'] for (i, steps) in enumerate(spb): if used_goback: df, _ = get_step_i_dihedrals(i, indices, angles) else: df = angles[angles['frame'] == i + 1] beta_good = sum(((df['beta'] > limits.loc['beta1']['low']) & (df['beta'] < limits.loc['beta1']['high']) & (df['B-type'] == 'BI')) | ((df['beta'] > limits.loc['beta2']['low']) & (df['beta'] < limits.loc['beta2']['high']) & (df['B-type'] == 'BII'))) n_beta = df['beta'].notnull().sum() * 1.0 angle_vs_steps[i, 2] = beta_good / n_beta gamma_good = sum((df['gamma'] > limits.loc['gamma']['low']) & (df['gamma'] < limits.loc['gamma']['high'])) n_gamma = df['gamma'].notnull().sum() * 1.0 angle_vs_steps[i, 3] = gamma_good / n_gamma delta_good = sum(((df['delta'] > limits.loc['delta1']['low']) & (df['delta'] < limits.loc['delta1']['high']) & (df['B-type'] == 'BI')) | ((df['delta'] > limits.loc['delta2']['low']) & (df['delta'] < limits.loc['delta2']['high']) & (df['B-type'] == 'BII'))) n_delta = df['delta'].notnull().sum() * 1.0 angle_vs_steps[i, 4] = delta_good / n_delta chi_good = sum((((df['resname'] == 'C') | (df['resname'] == 'T')) & (df['chi'] > limits.loc['chi1py']['low']) & (df['chi'] < limits.loc['chi1py']['high']) & (df['B-type'] == 'BI')) | (((df['resname'] == 'G') | (df['resname'] == 'A')) & (df['chi'] > limits.loc['chi1pu']['low']) & (df['chi'] < limits.loc['chi1pu']['high']) & (df['B-type'] == 'BI')) | ((df['chi'] > limits.loc['chi2']['low']) & (df['chi'] < limits.loc['chi2']['high']) & (df['B-type'] == 'BII'))) n_chi = df['chi'].notnull().sum() * 1.0 angle_vs_steps[i, 7] = chi_good / n_chi alpha_good = sum((df['alpha'] > limits.loc['alpha']['low']) & (df['alpha'] < limits.loc['alpha']['high'])) n_alpha = df['alpha'].notnull().sum() * 1.0 angle_vs_steps[i, 1] = alpha_good / n_alpha epsilon_good = sum(( (df['epsilon'] > limits.loc['epsilon1']['low']) & (df['epsilon'] < limits.loc['epsilon1']['high']) & (df['B-type'] == 'BI')) | ( (df['epsilon'] > limits.loc['epsilon2']['low']) & (df['epsilon'] < limits.loc['epsilon2']['high']) & (df['B-type'] == 'BII'))) n_epsilon = df['epsilon'].notnull().sum() * 1.0 angle_vs_steps[i, 5] = epsilon_good / n_epsilon zeta_good = sum(((df['zeta'] > limits.loc['zeta1']['low']) & (df['zeta'] < limits.loc['zeta1']['high']) & (df['B-type'] == 'BI')) | ((df['zeta'] > limits.loc['zeta2']['low']) & (df['zeta'] < limits.loc['zeta2']['high']) & (df['B-type'] == 'BII'))) n_zeta = df['zeta'].notnull().sum() * 1.0 angle_vs_steps[i, 6] = zeta_good / n_zeta np.save(npy_file, angle_vs_steps) fig = plt.figure() # figsize=(6, 4)) gs1 = gridspec.GridSpec(1, 1, left=0.075, right=0.75, wspace=0.1, hspace=0, top=0.95) ax1 = plt.subplot(gs1[:, 0]) angle_labels = [ r'$\alpha$', r'$\beta$', r'$\gamma$', r'$\delta$', r'$\epsilon$', r'$\zeta$', r'$\chi$' ] plot_order = [2, 3, 4, 7, 1, 5, 6] # plot_order = [1, 5, 6] # plot_order = [2, 3, 4, 7] ax1.axhline(95, ls='--', c='DimGray', linewidth=2) # label=r'$2\sigma$ cutoff') if len(angle_vs_steps) > 2: for (c, i_angle) in enumerate(plot_order): ax1.plot(angle_vs_steps[:, 0], angle_vs_steps[:, i_angle] * 100, '-', c=gwp.qual_color(c), label=angle_labels[i_angle - 1]) ax1.set_ylim([73, 102]) ax1.set_xscale('log') x_max = angle_vs_steps[-1, 0] x_min = angle_vs_steps[0, 0] ax1.set_xlim([x_min, x_max]) else: for (c, i_angle) in enumerate(plot_order): ax1.plot(angle_vs_steps[:, 0], angle_vs_steps[:, i_angle] * 100, '-', color=gwp.qual_color(c), marker=gwp.symbol_order(c), mec=gwp.qual_color(c), label=angle_labels[i_angle - 1], markersize=15, mfc='none') ax1.set_ylim([-1, 110]) ax1.set_ylabel(r'% of Dihedrals in $2\sigma$ Range') ax1.set_xlabel(r'Minimization Iterations') default_fontsize = 12 lg = plt.legend(loc='lower left', scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) lg.draw_frame(False) if show: plt.show() else: save_name = '%s_in_range' % dcd_file_name[:-4] if MD: save_name += '_MD' if max_frame: save_name += '_' + str(max_frame) plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'View figure: \nevince %s.eps &' % save_name print 'done plotting' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' if MD: all_in_range_file += '_MD' all_in_range = np.copy(angle_vs_steps[:, :2]) all_in_range[:, 1] = angle_vs_steps[:, 1:].mean(axis=1) np.savetxt(all_in_range_file + '.out', all_in_range)
def plot_good_dihedrals(dcd_file_name, max_frame=None, scale_spb=1, used_goback=False, show=False, MD=True): if MD: if max_frame: npy_file = dcd_file_name[:-4] + '_MD_%d.npy' % max_frame else: npy_file = dcd_file_name[:-4] + '_MD.npy' else: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-4] + '.npy' try: angle_vs_steps = np.load(npy_file) print 'loaded percent of good angles file: %s' % npy_file except: print 'failed to load percent of good angles file: %s' % npy_file angles = pd.read_hdf(dcd_file_name[:-3] + 'hdf', 'angles') angles['-90'] = np.abs(-90 - (angles['epsilon'] - angles['zeta'])) angles['+90'] = np.abs(90 - (angles['epsilon'] - angles['zeta'])) angles['min'] = angles.loc[:,['+90', '-90']].min(axis=1) angles['B-type'] = 'B' angles.loc[angles['min'] == angles['+90'], 'B-type'] = 'BII' angles.loc[angles['min'] == angles['-90'], 'B-type'] = 'BI' try: scale_spb == 1 # enforce there is not a scale all_spb = np.loadtxt(dcd_file_name[:-3] + 'spb') print ('loaded steps/bead file: %s' % (dcd_file_name[:-3] + 'spb')) except: print ('failed to load steps/bead file: %s \n' 'using %f step/s between frames' % (dcd_file_name[:-3] + 'spb', scale_spb)) all_spb = np.unique(angles['frame']) all_spb = all_spb.reshape(len(all_spb), 1) all_spb = np.concatenate((all_spb, all_spb*scale_spb), axis=1) if max_frame: nf = max_frame else: nf = len(all_spb) spb, indices = np.unique(all_spb[:nf, 1], return_inverse=True) n_steps = len(spb) angle_vs_steps = np.zeros((n_steps, 8)) # 7 angles angle_vs_steps[:, 0] = spb if MD: limit_file = ('/home/schowell/data/myData/dihedrals/' 'dsDNA_60bps/md_angles.txt') else: limit_file = ('/home/schowell/data/myData/dihedrals/' 'dsDNA_60bps/dna_angles.txt') limits = pd.read_csv(limit_file, index_col=0) limits['low'] = limits['mean'] - 2 * limits['sd'] limits['high'] = limits['mean'] + 2 * limits['sd'] for (i, steps) in enumerate(spb): if used_goback: df, _ = get_step_i_dihedrals(i, indices, angles) else: df = angles[angles['frame'] == i+1] beta_good = sum( ((df['beta'] > limits.loc['beta1']['low']) & (df['beta'] < limits.loc['beta1']['high']) & (df['B-type'] == 'BI')) | ((df['beta'] > limits.loc['beta2']['low']) & (df['beta'] < limits.loc['beta2']['high']) & (df['B-type'] == 'BII'))) n_beta = df['beta'].notnull().sum() * 1.0 angle_vs_steps[i, 2] = beta_good / n_beta gamma_good = sum( (df['gamma'] > limits.loc['gamma']['low']) & (df['gamma'] < limits.loc['gamma']['high'])) n_gamma = df['gamma'].notnull().sum() * 1.0 angle_vs_steps[i, 3] = gamma_good / n_gamma delta_good = sum( ((df['delta'] > limits.loc['delta1']['low']) & (df['delta'] < limits.loc['delta1']['high']) & (df['B-type'] == 'BI')) | ((df['delta'] > limits.loc['delta2']['low']) & (df['delta'] < limits.loc['delta2']['high']) & (df['B-type'] == 'BII'))) n_delta = df['delta'].notnull().sum() * 1.0 angle_vs_steps[i, 4] = delta_good / n_delta chi_good = sum( (((df['resname'] == 'C') | (df['resname'] == 'T')) & (df['chi'] > limits.loc['chi1py']['low']) & (df['chi'] < limits.loc['chi1py']['high']) & (df['B-type'] == 'BI')) | (((df['resname'] == 'G') | (df['resname'] == 'A')) & (df['chi'] > limits.loc['chi1pu']['low']) & (df['chi'] < limits.loc['chi1pu']['high']) & (df['B-type'] == 'BI')) | ((df['chi'] > limits.loc['chi2']['low']) & (df['chi'] < limits.loc['chi2']['high']) & (df['B-type'] == 'BII'))) n_chi = df['chi'].notnull().sum() * 1.0 angle_vs_steps[i, 7] = chi_good / n_chi alpha_good = sum( (df['alpha'] > limits.loc['alpha']['low']) & (df['alpha'] < limits.loc['alpha']['high'])) n_alpha = df['alpha'].notnull().sum() * 1.0 angle_vs_steps[i, 1] = alpha_good / n_alpha epsilon_good = sum( ((df['epsilon'] > limits.loc['epsilon1']['low']) & (df['epsilon'] < limits.loc['epsilon1']['high']) & (df['B-type'] == 'BI')) | ((df['epsilon'] > limits.loc['epsilon2']['low']) & (df['epsilon'] < limits.loc['epsilon2']['high']) & (df['B-type'] == 'BII'))) n_epsilon = df['epsilon'].notnull().sum() * 1.0 angle_vs_steps[i, 5] = epsilon_good / n_epsilon zeta_good = sum( ((df['zeta'] > limits.loc['zeta1']['low']) & (df['zeta'] < limits.loc['zeta1']['high']) & (df['B-type'] == 'BI')) | ((df['zeta'] > limits.loc['zeta2']['low']) & (df['zeta'] < limits.loc['zeta2']['high']) & (df['B-type'] == 'BII'))) n_zeta = df['zeta'].notnull().sum() * 1.0 angle_vs_steps[i, 6] = zeta_good / n_zeta np.save(npy_file, angle_vs_steps) fig = plt.figure() # figsize=(6, 4)) gs1 = gridspec.GridSpec(1, 1, left=0.075, right=0.75, wspace=0.1, hspace=0, top=0.95) ax1 = plt.subplot(gs1[:, 0]) angle_labels = [r'$\alpha$', r'$\beta$', r'$\gamma$', r'$\delta$', r'$\epsilon$', r'$\zeta$', r'$\chi$'] plot_order = [2, 3, 4, 7, 1, 5, 6] # plot_order = [1, 5, 6] # plot_order = [2, 3, 4, 7] ax1.axhline(95, ls='--', c='DimGray', linewidth=2) # label=r'$2\sigma$ cutoff') if len(angle_vs_steps)>2: for (c, i_angle) in enumerate(plot_order): ax1.plot(angle_vs_steps[:, 0], angle_vs_steps[:, i_angle]*100, '-', c=gwp.qual_color(c), label=angle_labels[i_angle - 1]) ax1.set_ylim([73, 102]) ax1.set_xscale('log') x_max = angle_vs_steps[-1, 0] x_min = angle_vs_steps[0, 0] ax1.set_xlim([x_min, x_max]) else: for (c, i_angle) in enumerate(plot_order): ax1.plot(angle_vs_steps[:, 0], angle_vs_steps[:, i_angle]*100, '-', color=gwp.qual_color(c), marker=gwp.symbol_order(c), mec=gwp.qual_color(c), label=angle_labels[i_angle - 1], markersize=15, mfc='none') ax1.set_ylim([-1, 110]) ax1.set_ylabel(r'% of Dihedrals in $2\sigma$ Range') ax1.set_xlabel(r'Minimization Iterations') default_fontsize = 12 lg = plt.legend(loc='lower left', scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) lg.draw_frame(False) if show: plt.show() else: save_name = '%s_in_range' % dcd_file_name[:-4] if MD: save_name += '_MD' if max_frame: save_name += '_' + str(max_frame) plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'View figure: \nevince %s.eps &' % save_name print 'done plotting' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' if MD: all_in_range_file += '_MD' all_in_range = np.copy(angle_vs_steps[:,:2]) all_in_range[:,1] = angle_vs_steps[:,1:].mean(axis=1) np.savetxt(all_in_range_file + '.out', all_in_range)
def plot_aez_dihedrals(dcd_files, key, max_frame=None, scale_spb=1, used_goback=False, show=False, prefix=None): angle_vs_steps = [] for dcd_file_name in dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' angle_vs_steps.append(np.load(npy_file)) print 'loaded percent of good angles file: %s' % npy_file fig = plt.figure(figsize=(6.5, 10)) gs1 = gridspec.GridSpec(3, 1, left=0.1, right=0.75, wspace=0, hspace=0) angle_labels = [ 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'chi' ] plot_order = [1, 5, 6] # only plot alpha, beta, and gamma default_fontsize = 12 for (i, i_angle) in enumerate(plot_order): ax1 = plt.subplot(gs1[i]) x_max = [] for j in xrange(len(dcd_files)): ax1.plot(angle_vs_steps[j][:, 0], angle_vs_steps[j][:, i_angle], '-', c=gwp.qual_color(j), label=key[j]) x_max.append(angle_vs_steps[j][-1, 0]) ax1.set_ylim([0, 1.1]) ax1.set_ylabel(r'% in range') ax1.set_xlim([0, min(x_max)]) if i < len(plot_order) - 1: ax1.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax1.set_xlabel(r'steps per bp') if i == 0: lg = plt.legend(loc='upper left', bbox_to_anchor=(1, 1), scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) ax1.set_title(angle_labels[i_angle - 1], y=0.05) if show: plt.show() else: save_name = 'dsDNA_60bps/moved_in_range' if prefix: save_name = save_name + '_' + prefix if max_frame: save_name += '_' + str(max_frame) plt.savefig(save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(save_name + '.png', dpi=400, bbox_inches='tight') print 'saved figures to %s.eps and %s.png' % (save_name, save_name) print 'done plotting'
def compare_min_dihedrals(raw_dcd_files, min_dcd_files, key, max_frame=None, scale_spb=1, used_goback=False, show=False, prefix=None): raw_angle_vs_steps = [] min_angle_vs_steps = [] raw_all_in_range = [] min_all_in_range = [] for dcd_file_name in min_dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' try: if 'MD' in prefix: npy_file = npy_file.replace('.npy', '_MD.npy') all_in_range_file += '_MD' except: pass min_angle_vs_steps.append(np.load(npy_file)) min_all_in_range.append(np.loadtxt(all_in_range_file + '.out')) print 'loaded percent in range files: \n%s \n%s' % (npy_file, all_in_range_file) for dcd_file_name in raw_dcd_files: if max_frame: npy_file = dcd_file_name[:-4] + '_%d.npy' % max_frame else: npy_file = dcd_file_name[:-3] + 'npy' all_in_range_file = dcd_file_name[:-4] + '_ave_in_range' try: if 'MD' in prefix: npy_file = npy_file.replace('.npy', '_MD.npy') all_in_range_file += '_MD' except: pass raw_angle_vs_steps.append(np.load(npy_file)) raw_all_in_range.append(np.loadtxt(all_in_range_file + '.out')) print 'loaded percent in range files: \n%s \n%s' % (npy_file, all_in_range_file) fig = plt.figure(figsize=(5, 12)) gs = gridspec.GridSpec(8, 2, left=0.1, right=0.75, wspace=0.07, hspace=0) angle_labels = [ r'$\alpha$', r'$\beta$', r'$\gamma$', r'$\delta$', r'$\epsilon$', r'$\zeta$', r'$\chi$', r'All' ] plot_order = [0, 2, 3, 4, 7, 1, 5, 6] # change to show select angles default_fontsize = 12 def plot_settings(ax, x_min, x_max): ax.set_ylim([71, 104]) ax.set_xscale('log') ax.set_xlim([min(x_min), min(x_max)]) for (i, i_angle) in enumerate(plot_order): ax = plt.subplot(gs[i, 0]) plt.axhline(95, ls='--', c='DimGray', linewidth=2) x_max = [] x_min = [] for j in xrange(len(raw_dcd_files)): if i_angle == 0: ax.plot(raw_all_in_range[j][:, 0], raw_all_in_range[j][:, 1] * 100, '-', c=gwp.qual_color(j), label=key[j]) x_max.append(raw_all_in_range[j][-1, 0]) x_min.append(raw_all_in_range[j][0, 0]) ax.text(18, 107, 'Raw') else: ax.plot(raw_angle_vs_steps[j][:, 0], raw_angle_vs_steps[j][:, i_angle] * 100, '-', c=gwp.qual_color(j), label=key[j]) x_max.append(raw_angle_vs_steps[j][-1, 0]) x_min.append(raw_angle_vs_steps[j][0, 0]) plot_settings(ax, x_min, x_max) ax.set_ylabel(r'% in range') if i < len(plot_order) - 1: ax.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax.set_xlabel(r'steps per bp') ax.set_title(angle_labels[i_angle - 1], y=0.03, x=0.12) for (i, i_angle) in enumerate(plot_order): ax = plt.subplot(gs[i, 1]) plt.axhline(95, ls='--', c='DimGray', linewidth=2) for j in xrange(len(min_dcd_files)): if i_angle == 0: ax.plot(min_all_in_range[j][:, 0], min_all_in_range[j][:, 1] * 100, '-', c=gwp.qual_color(j), label=key[j]) ax.text(9, 107, 'Minimized') else: ax.plot(min_angle_vs_steps[j][:, 0], min_angle_vs_steps[j][:, i_angle] * 100, '-', c=gwp.qual_color(j), label=key[j]) plot_settings(ax, x_min, x_max) ax.yaxis.set_ticklabels([]) if i < len(plot_order) - 1: ax.xaxis.set_ticklabels([]) # ax1.xaxis.set_ticks([]) else: ax.set_xlabel(r'steps per bp') ax.set_title(angle_labels[i_angle - 1], y=0.03, x=0.12) if i == 0: lg = plt.legend(loc='upper left', bbox_to_anchor=(1, 1), scatterpoints=1, numpoints=1, prop={'size': default_fontsize}) path = 'dsDNA_60bps/' save_name = 'raw_min_percent_in_range' if prefix: save_name = prefix + '_' + save_name if max_frame: save_name += '_' + str(max_frame) plt.savefig(path + save_name + '.eps', dpi=400, bbox_inches='tight') plt.savefig(path + save_name + '.png', dpi=400, bbox_inches='tight') print 'saved figures to %s.eps and %s.png' % (save_name, save_name) if show: plt.show() print 'done plotting'