This is the python script used to generate the pictures for article 79649
#!/usr/bin/env python3 # ================================================================ # This script generates pictures for article 79649 # # Written by Randy S (2022) # ================================================================ import numpy as np import scipy.integrate as integrate import matplotlib.pyplot as plotter import sys global numdims num = 30 # number of grid-points in the vector-field pictures # =================================================================== def get_xbeta( x, y ): return 2*x + y - x*y # =================================================================== def get_ybeta( x, y ): return (4-numdims)*y - 3*y*y # =================================================================== def get_fixed_points(): global numdims if numdims == 4: x = np.array( [0, 0] ) y = np.array( [0, 0] ) else: x = np.array( [0, 1/(1-(6.0/(4-numdims)))] ) y = np.array( [0, (4-numdims)/3.0] ) if 0: # check print( 'Should be zero:', 2*x+y-x*y ) print( 'Should be zero:', (4-numdims)*y-3*y*y ) return x, y # =================================================================== def finishPlotting( ax, filename ): # https://stackoverflow.com/questions/3899980/how-to-change-the-font-size-on-a-matplotlib-plot fs = 16 for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] + ax.get_xticklabels() + ax.get_yticklabels() ): item.set_fontsize(fs) if 1: # Save picture to file fig = plotter.gcf() filename += '.pdf' print( 'Writing ' + filename ) # fig.tight_layout() fig.savefig(filename, bbox_inches='tight') print( 'Closed ' + filename ) # Show the picture on the screen plotter.show() # =================================================================== def showFunction( filename ): xfp, yfp = get_fixed_points() # https://stackoverflow.com/questions/32462881/add-colorbar-to-existing-axis fig, ax = plotter.subplots() # https://matplotlib.org/3.5.0/tutorials/text/usetex.html plotter.rcParams.update({ "text.usetex": True, "font.family": "Helvetica" }) # choose the range to show for each axis if numdims <= 4: xmin = -0.35 xmax = 0.15 ymin = -0.1 ymax = 0.4 if 0: # closeup for d = 3.9 xmin = -0.035 xmax = 0.015 ymin = -0.01 ymax = 0.04 else: xmin = -0.15 xmax = 0.35 ymin = -0.4 ymax = 0.1 # show the axes plotter.plot( [xmin,xmax], [0,0], color='gray' ) plotter.plot( [0,0], [ymin,ymax], color='gray' ) # show the fixed points for k in range(len(xfp)): plotter.plot( xfp[k], yfp[k], 'ob' ) # show the arrows x,y = np.meshgrid(np.linspace( xmin, xmax, num ), \ np.linspace( ymin, ymax, num )) xbeta = get_xbeta( x, y ) ybeta = get_ybeta( x, y ) if normalize: amp = 1/np.sqrt(xbeta**2 + ybeta**2) else: amp = 1 plotter.quiver( x, y, amp*xbeta, amp*ybeta ) # control the number of tick-marks plotter.locator_params(axis='x', nbins=5) plotter.locator_params(axis='y', nbins=5) # label the graph ax.set_xlabel( r'$g_2$' ) ax.set_ylabel( r'$g_4$' ) title = r'$d=' + str(numdims) + '$' if normalize: title += ', normalized' ax.set_title( title ) finishPlotting( ax, filename ) # =================================================================== # Main program if len(sys.argv) < 4: print( 'Usage:' ) print( ' 79649f.py numdims normalize filename' ) print( 'with' ) print( ' numdims = number of spacetime dimensions' ) print( ' normalize = 0 or 1' ) print( ' filename (without extension -- .pdf will be appended)' ) sys.exit() # inputs from command-line numdims = float(sys.argv[1]) # number of spacetime dimensions normalize = int(sys.argv[2]) # 0 or 1 filename = sys.argv[3] showFunction( filename )