On Sunday, April 3, 2016 at 5:19:15 PM UTC-7, MRAB wrote: > On 2016-04-04 01:04, Muhammad Ali wrote: > > On Sunday, April 3, 2016 at 2:35:58 PM UTC-7, Oscar Benjamin wrote: > >> On 3 Apr 2016 22:21, "Muhammad Ali" <muhammadaliask...@gmail.com> wrote: > >> > > >> > How do I convert/change/modify python script so that my data could be > >> extracted according to python script and at the end it generates another > >> single extracted data file instead of displaying/showing some graph? So > >> that, I can manually plot the newly generated file (after data extraction) > >> by some other software like origin. > >> > >> It depends what you're computing and what format origin expects the data to > >> be in. Presumably it can use CSV files so take a look at the CSV module > >> which can write these. > >> > >> (You'll get better answers to a question like this if you show us some code > >> and ask a specific question about how to change it.) > >> > >> -- > >> Oscar > > > > How could the python script be modified to generate data file rather than > > display a plot by using matplotlib? > > > > > > def make_plot(plot): > > indent = plot.plot_options.indent > > args = plot.plot_options.args > > # Creating the plot > > print ('Generating the plot...') > > fig = > > plt.figure(figsize=(plot.fig_width_inches,plot.fig_height_inches)) > > ax = fig.add_subplot(111) > > # Defining the color schemes. > > print (indent + '>>> Using the "' + plot.cmap_name + '" colormap.') > > if(plot.plot_options.using_default_cmap and not args.running_from_GUI): > > print (2 * indent + 'Tip: You can try different colormaps by > > either:') > > print (2 * indent + ' * Running the plot tool with the option > > -icmap n, ' \ > > 'with n in the range from 0 to', > > len(plot.plot_options.cmaps) - 1) > > print (2 * indent + ' * Running the plot tool with the option > > "-cmap cmap_name".') > > print (2 * indent + '> Take a look at') > > print (4 * indent + > > '<http://matplotlib.org/examples/color/colormaps_reference.html>') > > print (2 * indent + ' for a list of colormaps, or run') > > print (4 * indent + '"./plot_unfolded_EBS_BandUP.py --help".') > > > > # Building the countour plot from the read data > > # Defining the (ki,Ej) grid. > > if(args.interpolation is not None): > > ki = np.linspace(plot.kmin, plot.kmax, 2 * > > len(set(plot.KptsCoords)) + 1, endpoint=True) > > Ei = np.arange(plot.emin, plot.emax + plot.dE_for_hist2d, > > plot.dE_for_hist2d) > > # Interpolating > > grid_freq = griddata((plot.KptsCoords, plot.energies), > > plot.delta_Ns, (ki[None,:], Ei[:,None]), > > method=args.interpolation, fill_value=0.0) > > else: > > ki = np.unique(np.clip(plot.KptsCoords, plot.kmin, plot.kmax)) > > Ei = np.unique(np.clip(plot.energies, plot.emin, plot.emax)) > > grid_freq = griddata((plot.KptsCoords, plot.energies), > > plot.delta_Ns, (ki[None,:], Ei[:,None]), > > method='nearest', fill_value=0.0) > > > > if(not args.skip_grid_freq_clip): > > grid_freq = grid_freq.clip(0.0) # Values smaller than zero are > > just noise. > > # Normalizing and building the countour plot > > manually_normalize_colorbar_min_and_maxval = False > > if((args.maxval_for_colorbar is not None) or (args.minval_for_colorbar > > is not None)): > > manually_normalize_colorbar_min_and_maxval = True > > args.disable_auto_round_vmin_and_vmax = True > > maxval_for_colorbar = args.maxval_for_colorbar > > minval_for_colorbar = args.minval_for_colorbar > > else: > > if not args.disable_auto_round_vmin_and_vmax: > > minval_for_colorbar = float(round(np.min(grid_freq))) > > maxval_for_colorbar = float(round(np.max(grid_freq))) > > args.round_cb = 0 > > if(manually_normalize_colorbar_min_and_maxval or not > > args.disable_auto_round_vmin_and_vmax): > > modified_vmin_or_vmax = False > > if not args.disable_auto_round_vmin_and_vmax and not > > args.running_from_GUI: > > print (plot.indent + '* Automatically renormalizing color > > scale '\ > > '(you can disable this with the option > > --disable_auto_round_vmin_and_vmax):') > > if manually_normalize_colorbar_min_and_maxval: > > print (plot.indent + '* Manually renormalizing color scale') > > if(minval_for_colorbar is not None): > > previous_vmin = np.min(grid_freq) > > if(abs(previous_vmin - minval_for_colorbar) >= 0.1): > > modified_vmin_or_vmax = True > > print (2 * indent + 'Previous vmin = %.1f, new vmin = > > %.1f' % (previous_vmin, > > > > minval_for_colorbar)) > > else: > > minval_for_colorbar = np.min(grid_freq) > > if(maxval_for_colorbar is not None): > > previous_vmax = np.max(grid_freq) > > if(abs(previous_vmax - maxval_for_colorbar) >= 0.1): > > modified_vmin_or_vmax = True > > print (2 * indent + 'Previous vmax = %.1f, new vmax = > > %.1f' % (previous_vmax, > > > > maxval_for_colorbar)) > > else: > > maxval_for_colorbar = np.max(grid_freq) > > if(modified_vmin_or_vmax): > > print (2 * indent + 'The previous vmin and vmax might be > > slightly different from ' > > 'the min and max delta_Ns ' > > 'due to the interpolation scheme used for > > the plot.') > > # values > vmax will be set to vmax, and #<vmin will be set to vmin > > grid_freq = grid_freq.clip(minval_for_colorbar, > > maxval_for_colorbar) > > v = np.linspace(minval_for_colorbar, maxval_for_colorbar, > > args.n_levels, endpoint=True) > > else: > > v = np.linspace(np.min(grid_freq), np.max(grid_freq), > > args.n_levels, endpoint=True) > > print (indent + '* Drawing contour plot...') > > print (2 * indent + '> Using %i color levels. Use the option > > "--n_levels" to choose a different number.' %args.n_levels) > > image = ax.contourf(ki, Ei, grid_freq, levels=v, cmap=plot.cmap) > > > > plot_spin_proj_requested = args.plot_spin_perp or args.plot_spin_para > > or args.plot_sigma_x or args.plot_sigma_y or args.plot_sigma_z > > if(plot_spin_proj_requested and plot.spin_projections is not None): > > print (indent + '* Drawing spin projection info') > > cmap_for_spin_plot = [plt.cm.bwr, plt.cm.RdBu, plt.cm.seismic_r][0] > > > > if(args.clip_spin is None): > > vmin_spin = np.min(plot.spin_projections) > > vmax_spin = np.max(plot.spin_projections) > > else: > > vmax_spin = abs(args.clip_spin) > > vmin_spin = -1.0 * abs(args.clip_spin) > > print (2 * indent + '* New maxval for spin: %.2f' % vmax_spin) > > print (2 * indent + '* New minval for spin: %.2f' % vmin_spin) > > > > spin_projections = np.clip(plot.spin_projections, vmin_spin, > > vmax_spin) > > grid_freq_spin = griddata((plot.KptsCoords, plot.energies), > > spin_projections, (ki[None,:], Ei[:,None]), > > method='nearest', fill_value=0.0) > > > > k_for_scatter = [] > > E_for_scatter = [] > > spin_projections_for_scatter = [] > > for iener in range(len(Ei)): > > for ikpt in range(len(ki)): > > if(abs(grid_freq_spin[iener, ikpt]) > 1E-3): > > k_for_scatter.append(ki[ikpt]) > > E_for_scatter.append(Ei[iener]) > > > > spin_projections_for_scatter.append(grid_freq_spin[iener, ikpt]) > > > > if(spin_projections_for_scatter): > > if(args.spin_marker=='o'): > > image2 = ax.scatter(k_for_scatter, E_for_scatter, > > marker='o', > > s=[10.0 * abs(item) for item in > > spin_projections_for_scatter], > > c=spin_projections_for_scatter, > > cmap=cmap_for_spin_plot) > > else: > > image2 = ax.scatter(k_for_scatter, E_for_scatter, > > marker='_', > > s=[500.0 * (ki[1] - ki[0]) for item in > > spin_projections_for_scatter], > > linewidth=[100.0 * plot.dE_for_hist2d > > * (item ** 2) for item in spin_projections_for_scatter], > > c=spin_projections_for_scatter, > > cmap=cmap_for_spin_plot) > > else: > > print (2 * indent + '* The abs values of the spin projections > > were all < 1E-3.') > > > > #Preparing the plot > > ax.set_xlim(plot.kmin, plot.kmax) > > ax.set_ylim(plot.emin, plot.emax) > > ax.set_title(plot.title, fontsize=plot.title_size) > > ax.set_ylabel(plot.y_axis_label, fontsize=plot.yaxis_labels_size) > > plt.yticks(fontsize=plot.tick_marks_size) > > > > # Fermi energy line > > show_E_f = not args.no_ef > > if(show_E_f and plot.E_f >= plot.emin and plot.E_f <= plot.emax): > > E_f_line = plt.axhline(y=plot.E_f, c=plot.color_E_f_line(image), > > linestyle=plot.line_style_E_f, lw=plot.line_width_E_f) > > # High symmetry points lines > > if(plot.pos_high_symm_points): > > x_tiks_positions = [kx for kx in plot.pos_high_symm_points if kx - > > plot.kmax <= 1E-2 and kx >= plot.kmin] > > if(args.no_symm_labels): > > x_tiks_labels = [] > > else: > > x_tiks_labels = [plot.labels_high_symm_lines[i] for i in > > range(len(plot.labels_high_symm_lines)) if > > plot.pos_high_symm_points[i] in x_tiks_positions] > > x_tiks_labels = [xlabel for xlabel in x_tiks_labels if xlabel] > > if x_tiks_labels: > > print (indent + '* K-point labels read from the "' + > > args.kpoints_file + '" file:') > > for ilabel in range(len(x_tiks_labels)): > > print(2 * indent + "k = > > {:9.5f}".format(x_tiks_positions[ilabel]) + ', label =',\ > > x_tiks_labels[ilabel]) > > plt.xticks(x_tiks_positions, x_tiks_labels, > > fontsize=plot.tick_marks_size) > > else: > > plot.x_axis_label = '$k \hspace{0.25} (\AA^{-1})$' > > plt.locator_params(axis = 'x', nbins = 5) > > ax.set_xlabel(plot.x_axis_label, fontsize=plot.xaxis_labels_size) > > plt.xticks(fontsize=plot.tick_marks_size) > > ax.tick_params(axis='x', pad=10) > > > > # Drawing vertical lines at the positions of the high-symmetry points > > if(not args.no_symm_lines): > > for line_position in [pos for pos in plot.pos_high_symm_points if > > float(round(pos, 3)) > float(round(plot.kmin, 3)) and > > > > float(round(pos, 3)) < float(round(plot.kmax, 3))]: > > hs_lines = plt.axvline(x=line_position, > > c=plot.color_high_symm_lines(image), > > linestyle=plot.line_style_high_symm_points, > > lw=plot.line_width_high_symm_points) > > > > # Color bar > > show_colorbar = not args.no_cb > > if show_colorbar: > > if plot.cb_orientation=='vertical': > > cb_pad=0.005 > > else: > > cb_pad=0.06 > > if(not x_tiks_labels): > > cb_pad += 0.08 # To prevent the cb from overlapping with the > > numbers. > > > > cb_yticks = np.arange(int(image.norm.vmin), int(image.norm.vmax) + > > 1, 1) > > > > cb_ytick_labels = [round(item,abs(args.round_cb)) for item in > > cb_yticks] > > cb = plt.colorbar(image, ax=ax, ticks=cb_yticks, > > orientation=plot.cb_orientation, pad=cb_pad) > > cb.set_ticklabels(cb_ytick_labels) > > cb.ax.tick_params(labelsize=plot.colorbar_tick_marks_size) > > > > color_bar_label = None > > if args.cb_label: > > color_bar_label = ('$Color scale: \hspace{0.5} \delta > > N(\\vec{k}; ' + > > '\hspace{0.25} \epsilon)$ ') > > if args.cb_label_full: > > color_bar_label = ('$Colors cale: \hspace{0.5} \delta > > N(\\vec{k}; ' + > > '\hspace{0.25} \epsilon);$ '+ > > '$\delta\epsilon=' + > > round(1000.0*plot.dE_for_hist2d,0) + > > '\\hspace{0.25} meV.$') > > > > if plot.cb_orientation=='vertical': > > cb_label_rotation = 90 > > else: > > cb_label_rotation = 0 > > if color_bar_label: > > cb.ax.text(plot.offset_x_text_colorbar, > > plot.offset_y_text_colorbar, > > color_bar_label, rotation=cb_label_rotation, > > ha='center', > > va='center', fontsize=plot.colorbar_label_size) > > > > # Saving/showing the results > > plt.tick_params(which='both', bottom='off', top='off', left='off', > > right='off', > > labelbottom='on') > > > > > > default_out_basename = > > "_".join([splitext(basename(args.input_file))[0], 'E_from', str(plot.emin), > > 'to', > > str(plot.emax), 'eV_dE', > > str(plot.dE_for_hist2d), 'eV']) > > if(args.save): > > if(args.output_file is None): > > args.output_file = abspath(default_out_basename + '.' + > > args.file_format) > > > > print ('Savig figure to file "%s" ...' % args.output_file) > > if(args.fig_resolution[0].upper() == 'H'): > > print (indent + '* High-resolution figure (600 dpi).') > > fig_resolution_in_dpi = 600 > > elif (args.fig_resolution[0].upper() == 'M'): > > print (indent + '* Medium-resolution figure (300 dpi).') > > fig_resolution_in_dpi = 300 > > elif (args.fig_resolution[0].upper() == 'L'): > > print (indent + '* Low-resolution figure (100 dpi).') > > fig_resolution_in_dpi = 100 > > else: > > print (indent + 'Assuming medium-resolution (300 dpi) for the > > figure.') > > fig_resolution_in_dpi = 300 > > plt.savefig(args.output_file, dpi=fig_resolution_in_dpi, > > bbox_inches='tight') > > print (indent + '* Done saving figure (%s).' % args.output_file) > > > > if args.saveshow: > > print ('Opening saved figure (%s)...' % default_out_basename) > > # 'xdg-open' might fail to find the defualt program in some systems > > # For such cases, one can try to use other alternatives (just add > > more to the list below) > > image_viewer_list = ['xdg-open', 'eog'] > > for image_viewer in image_viewer_list: > > open_saved_fig = Popen([image_viewer, args.output_file], > > stdout=PIPE, stderr=PIPE) > > std_out, std_err = open_saved_fig.communicate() > > success_opening_file = std_err.strip() == '' > > if(success_opening_file): > > break > > if(not success_opening_file): > > print (indent + '* Failed (%s): no image viewer detected.' % > > default_out_basename) > > > > if args.show: > > print ('Showing figure (%s)...' % default_out_basename) > > plt.show() > > print (indent + '* Done showing figure (%s).' % > > default_out_basename) > > > > > > if __name__ == '__main__': > > print_opening_message() > > plot_options = BandUpPlotOptions() > > plot = BandUpPlot(plot_options) > > make_plot(plot) > > sys.exit(0) > > > Look at the line "if(args.save):". That decides whether to save. > > Where does args come from? It comes from "args = > plot.plot_options.args". "plot" is passed into "make_plot". > > Where does that object come from? It comes from "plot = > BandUpPlot(plot_options)". > > Where does "plot_options" come from? It comes from "plot_options = > BandUpPlotOptions()". > > What's "BandUpPlotOptions()"? I have no idea. It's not part of what > you've posted. > > Now, over to you to do the rest. Maybe it's mentioned in matplotlib's docs.
I have posted the whole python script, please guide me which lines need to modify to get a single data file instead of plot using matplotlib. Thank you. -- https://mail.python.org/mailman/listinfo/python-list