Commit 45ad9a3b4953ee87983909e5c27d06af7290a299

Authored by Jürgen Knödlseder
1 parent 69800b1c

Avoid using of gridspec matplotlib module in show_residuals.py

The module is not available on older matplotlib versions, for example the one installed by default on CentOS 6.
Showing 1 changed file with 36 additions and 22 deletions
examples/show_residuals.py
... ... @@ -24,7 +24,6 @@ import gammalib
24 24 import cscripts
25 25 try:
26 26 import matplotlib.pyplot as plt
27   - from matplotlib import gridspec
28 27 plt.figure()
29 28 plt.close()
30 29 except (ImportError, RuntimeError):
... ... @@ -32,6 +31,26 @@ except (ImportError, RuntimeError):
32 31 sys.exit()
33 32  
34 33  
  34 +# ======================= #
  35 +# Set residual label text #
  36 +# ======================= #
  37 +def set_residual_label(algorithm):
  38 + """
  39 + """
  40 + # Set algorithm dependent residual level
  41 + if algorithm == 'SUB':
  42 + label = 'Residuals (counts)'
  43 + elif algorithm == 'SUBDIV':
  44 + label = 'Residuals (fraction)'
  45 + elif algorithm == 'SUBDIVSQRT' or algorithm == 'SIGNIFICANCE':
  46 + label = r'Residuals ($\sigma$)'
  47 + else:
  48 + label = ''
  49 +
  50 + # Return label
  51 + return label
  52 +
  53 +
35 54 # ================================= #
36 55 # Fill counts/model/residual arrays #
37 56 # ================================= #
... ... @@ -186,23 +205,19 @@ def plot_residuals(filename, plotfile, hdu):
186 205 if is_onoff:
187 206 model_off = [model_off[0]] + model_off
188 207  
189   - # Plot
  208 + # Initialise figure
190 209 axarr = []
191 210 if is_onoff:
192   - f = plt.figure(figsize=(8, 4))
193   - gs = gridspec.GridSpec(2, 2, height_ratios=[2, 1])
194   - gs.update(hspace=0, left=0.09, right=0.97)
195   - axarr.append(f.add_subplot(gs[0]))
196   - axarr.append(f.add_subplot(gs[2]))
197   - axarr.append(f.add_subplot(gs[1], sharex=axarr[0]))
198   - axarr.append(f.add_subplot(gs[3], sharex=axarr[1]))
  211 + f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')
  212 + axarr.append(ax1)
  213 + axarr.append(ax2)
  214 + axarr.append(ax3)
  215 + axarr.append(ax4)
199 216 else:
200   - f = plt.figure()
201   - gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1])
202   - gs.update(hspace=0)
203   - axarr.append(f.add_subplot(gs[0]))
204   - axarr.append(f.add_subplot(gs[1], sharex=axarr[0]))
205   - plt.setp(axarr[1].get_xticklabels(), visible=False)
  217 + f, (ax1, ax2) = plt.subplots(2, sharex=True)
  218 + axarr.append(ax1)
  219 + axarr.append(ax2)
  220 + f.subplots_adjust(hspace=0)
206 221 axarr[0].set_xscale('log')
207 222 axarr[1].set_xscale('log')
208 223 axarr[0].set_yscale('log')
... ... @@ -219,21 +234,19 @@ def plot_residuals(filename, plotfile, hdu):
219 234 fmt='ko', capsize=0, linewidth=2, zorder=2)
220 235 axarr[1].axhline(0, color='0.5', linestyle='--')
221 236 axarr[1].set_xlabel('Energy (TeV)')
222   - if algorithm == 'SUB':
223   - axarr[1].set_ylabel('Residuals (counts)')
224   - elif algorithm == 'SUBDIV':
225   - axarr[1].set_ylabel('Residuals (fraction)')
226   - elif algorithm == 'SUBDIVSQRT' or algorithm == 'SIGNIFICANCE':
227   - axarr[1].set_ylabel(r'Residuals ($\sigma$)')
  237 + axarr[1].set_ylabel(set_residual_label(algorithm))
228 238  
229 239 # On/Off
230 240 if is_onoff:
  241 +
  242 + # Set titles and axes labels
231 243 axarr[0].set_title('ON')
232 244 axarr[2].set_title('OFF')
233   - plt.setp(axarr[3].get_xticklabels(), visible=False)
  245 + axarr[2].set_ylabel('Counts')
234 246 axarr[2].set_xscale('log')
235 247 axarr[3].set_xscale('log')
236 248 axarr[2].set_yscale('log')
  249 + axarr[3].set_ylabel(set_residual_label(algorithm))
237 250  
238 251 # Counts and model
239 252 axarr[2].errorbar(em_engs, counts_off, yerr=e_counts_off,
... ... @@ -242,6 +255,7 @@ def plot_residuals(filename, plotfile, hdu):
242 255 label='Data')
243 256 axarr[2].step(ebounds, model_off, color='0.5', linewidth=2, zorder=1,
244 257 label='Model')
  258 + axarr[2].set_xlabel('Energy (TeV)')
245 259  
246 260 # Residuals
247 261 axarr[3].errorbar(em_engs, resid_off, yerr=e_resid_off,
... ...