diff --git a/LPRDefaultPlotting.py b/LPRDefaultPlotting.py index fbfe810..ae10d50 100644 --- a/LPRDefaultPlotting.py +++ b/LPRDefaultPlotting.py @@ -7,15 +7,45 @@ ################################################################################ import matplotlib +import matplotlib.font_manager as FM +import re from matplotlib import rcParams, pyplot as pp from cycler import cycler +fcFontList = FM.get_fontconfig_fonts() +# Search only for fonts that have name matches similar to this +# note this is ALSO a priority list +fontsDesired = ['Times', 'Helvetica', 'Arial'] +fontsDesiredRe = re.compile('|'.join(fontsDesired), flags=re.IGNORECASE) +# Create a unique set of the fonts selected out of all of the system fonts +fontsAvailable = frozenset([FM.FontProperties(fname=fcFont).get_name()\ + for fcFont in fcFontList if fontsDesiredRe.search(fcFont) != None]) + +fontSelected=None +for fontSearch in fontsDesired: + for fontFound in fontsAvailable: + if re.search(fontSearch, fontFound, flags=re.IGNORECASE) != None: + fontSelected = fontFound + break + if fontSelected != None: + break +if fontSelected == None: + print("WARN: None of the requested fonts found on this system.") +else: + print("INFO: Using font '%s'" % (fontSelected)) + newFontPriority = [fontSelected] + newFontPriority.extend(rcParams['font.serif']) + rcParams['font.serif'] = newFontPriority + rcParams['grid.alpha'] = 0.5 rcParams['grid.linestyle'] = ':' rcParams['font.family'] = ['serif'] -rcParams['font.size'] = 6.5 -rcParams['mathtext.fontset'] = 'dejavuserif' -rcParams['mathtext.fontset'] = 'dejavuserif' +rcParams['font.size'] = 7 +#rcParams['figure.titlesize'] = "medium" +rcParams['axes.titlesize'] = 9 +rcParams['figure.titlesize'] = rcParams['axes.titlesize'] +#rcParams['mathtext.fontset'] = 'dejavuserif' +#rcParams['mathtext.fontset'] = 'custom' rcParams['mathtext.it'] = 'serif:italic' rcParams['mathtext.bf'] = 'serif:bold' rcParams['mathtext.sf'] = 'serif' diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa7a6df --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# What is this? +This whole tool is a basic front end for using Python's `matplotlib` in a +moderately interactive and robust manner to do MATLAB-like number crunching and +(more critically) plot generation for papers. + +## MATLAB Soapbox Explanation +While MATLAB has routines to save figures, the graphics back-end routinely runs +into issues with NVIDIA GPU based systems, and I'm sick and tired of being tied +to a tool that has a heavy resource footprint and only moderate documentation. +The licensing restrictions (though not fundamentally debilitating) are a +secondary reason I'm moving away from MATLAB. Finally, as I expect to graduate +soon, the $50 (or $130 for my toolboxes) annual cost is going to rise to a +debilitating point for things as mundane as personal projects. So I might as +well kick an expensive habit while it's easy to fall back when needed. + +# Resources +There are a few tricks to help configuring `matplotlib`. I'll update this +document to describe the commands and tools to help decipher the information +required to produce plots in a repeatable and tidy way. + +## 1. Plot Defaults +Plot defaults are managed by the `matplotlib` + +## 2. Font Selection +```python +import `matplotlib`.font_manager +print(matplotlib.font_manager.fontManager.afmlist) +print(matplotlib.font_manager.fontManager.ttflist) +``` + +I search for fonts using the following method: +``` +import matplotlib.font_manager as FM +import re + +fcFontList = FM.get_fontconfig_fonts() +# Search only for fonts that have name matches similar to this +fontsDesired = ['Helvetica', 'Times', 'Arial'] +fontsDesiredRe = re.compile('|'.join(fontsDesired), flags=re.IGNORECASE) +# Create a unique set of the fonts selected out of all of the system fonts +fontsAvailable = set([FM.FontProperties(fname=fcFont).get_name()\ + for fcFont in fcFontList if fontsDesiredRe.search(fcFont) != None]) + +``` + +[matplotlib docs](https://matplotlib.org/api/font_manager_api.html) + +## 3. + +# TODO +* make pySmithPlot a git sub-module +* think of a smarter way to refactor things (this is an ever evolving goal) diff --git a/runAll.sh b/runAll.sh old mode 100644 new mode 100755 diff --git a/tankPlot.py b/tankPlot.py index 3ab8f8e..7bcc508 100755 --- a/tankPlot.py +++ b/tankPlot.py @@ -40,6 +40,8 @@ import sys sys.path.append("./pySmithPlot") import smithplot from smithplot import SmithAxes +SmithAxes.update_scParams(axes_normalize=False, + grid_minor_fancy_threshold=50, axes_radius=0.5) plot_list = [args.n] @@ -66,6 +68,7 @@ from tankComputers import * freq_pts = 501 S=TankGlobals.ampSystem() +Sgv=TankGlobals.ampSystem() B=TankGlobals.bufferSystem() S.q1_L = 15 @@ -219,7 +222,7 @@ if 1 in plot_list or 11 in plot_list: [hT.show() for hT in h1] if 4 in plot_list or 14 in plot_list: - h4 = [pp.figure(figsize=(3.4,3.4)) for x in range(2)] + h4 = [pp.figure(figsize=(3.4,3)) for x in range(2)] ax4 = [] ax4.append(h4[0].add_subplot(1,1,1, projection='smith')) ax4.append(h4[1].add_subplot(1,1,1, projection='polar')) @@ -230,6 +233,13 @@ if 4 in plot_list or 14 in plot_list: ax4[0].set_title('Tank Impedance') ax4[1].set_title('Transfer Function') + # Adjust placement of smith plot + old_pos = ax4[0].title.get_position() + ax4[0].title.set_position((old_pos[0], 1.06)) + p = ax4[0].get_position() + p.set_points([[0, 0.07],[1, 0.86]]) + ax4[0].set_position(p) + old_pos = ax4[1].title.get_position() ax4[1].title.set_position((old_pos[0], 1.1)) h4[1].tight_layout()