diff --git a/bilby/gw/detector.py b/bilby/gw/detector.py
index b3b18e07ba314984e2c7a841ab8d07077a600862..d2151bf23c0e29662a30c5d1ffdcd6c74a961eeb 100644
--- a/bilby/gw/detector.py
+++ b/bilby/gw/detector.py
@@ -357,8 +357,14 @@ class InterferometerStrainData(object):
         -------
         array_like: An array of boolean values
         """
-        return ((self.frequency_array >= self.minimum_frequency) &
-                (self.frequency_array <= self.maximum_frequency))
+        try:
+            return self._frequency_mask
+        except AttributeError:
+            frequency_array = self._times_and_frequencies.frequency_array
+            mask = ((frequency_array >= self.minimum_frequency) &
+                    (frequency_array <= self.maximum_frequency))
+            self._frequency_mask = mask
+            return self._frequency_mask
 
     @property
     def alpha(self):
@@ -1604,24 +1610,29 @@ class Interferometer(object):
             return
 
         fig, ax = plt.subplots()
-        ax.loglog(self.frequency_array,
-                  gwutils.asd_from_freq_series(freq_data=self.frequency_domain_strain,
-                                               df=(self.frequency_array[1] - self.frequency_array[0])),
+        df = self.frequency_array[1] - self.frequency_array[0]
+        asd = gwutils.asd_from_freq_series(
+            freq_data=self.frequency_domain_strain, df=df)
+
+        ax.loglog(self.frequency_array[self.frequency_mask],
+                  asd[self.frequency_mask],
                   color='C0', label=self.name)
-        ax.loglog(self.frequency_array,
-                  self.amplitude_spectral_density_array,
-                  color='C1', lw=0.5, label=self.name + ' ASD')
+        ax.loglog(self.frequency_array[self.frequency_mask],
+                  self.amplitude_spectral_density_array[self.frequency_mask],
+                  color='C1', lw=1.0, label=self.name + ' ASD')
         if signal is not None:
-            ax.loglog(self.frequency_array,
-                      gwutils.asd_from_freq_series(freq_data=signal,
-                                                   df=(self.frequency_array[1] - self.frequency_array[0])),
+            signal_asd = gwutils.asd_from_freq_series(
+                freq_data=signal, df=df)
+
+            ax.loglog(self.frequency_array[self.frequency_mask],
+                      signal_asd[self.frequency_mask],
                       color='C2',
                       label='Signal')
         ax.grid(True)
-        ax.set_ylabel(r'strain [strain/$\sqrt{\rm Hz}$]')
-        ax.set_xlabel(r'frequency [Hz]')
-        ax.set_xlim(20, 2000)
+        ax.set_ylabel(r'Strain [strain/$\sqrt{\rm Hz}$]')
+        ax.set_xlabel(r'Frequency [Hz]')
         ax.legend(loc='best')
+        fig.tight_layout()
         if label is None:
             fig.savefig(
                 '{}/{}_frequency_domain_data.png'.format(outdir, self.name))