How do I plot a shot gather that has 24 traces?

How do I plot a shot gather that has 24 traces?

Check here: Waveform Plotting Tutorial — ObsPy 1.3.0.post0+271.g4fcb7687d7.obspy.master documentation

1 Like

Umm, st.plot(type = ‘section’) doesn’t work! It returns the following error:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
File ~\anaconda3\envs\obspy\lib\site-packages\obspy\core\util\attribdict.py:142, in AttribDict.__getattr__(self, name, default)
    141 try:
--> 142     return self.__getitem__(name, default)
    143 except KeyError as e:

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\core\trace.py:232, in Stats.__getitem__(self, key, default)
    231 else:
--> 232     return super(Stats, self).__getitem__(key, default)

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\core\util\attribdict.py:97, in AttribDict.__getitem__(self, name, default)
     96 try:
---> 97     return self.__dict__[name]
     98 except KeyError:
     99     # check if we got any default value given at class level

KeyError: 'distance'

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
File ~\anaconda3\envs\obspy\lib\site-packages\obspy\imaging\waveform.py:1170, in WaveformPlotting.__sect_init_traces(self)
   1169     for _i, tr in enumerate(self.stream):
-> 1170         self._tr_offsets[_i] = tr.stats.distance
   1171 except Exception:

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\core\util\attribdict.py:144, in AttribDict.__getattr__(self, name, default)
    143 except KeyError as e:
--> 144     raise AttributeError(e.args[0])

AttributeError: distance

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
Input In [9], in <cell line: 1>()
----> 1 st.plot(type = 'section')

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\core\stream.py:1155, in Stream.plot(self, *args, **kwargs)
   1153 from obspy.imaging.waveform import WaveformPlotting
   1154 waveform = WaveformPlotting(stream=self, *args, **kwargs)
-> 1155 return waveform.plot_waveform(*args, **kwargs)

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\imaging\waveform.py:271, in WaveformPlotting.plot_waveform(self, *args, **kwargs)
    269     self.plot_day(*args, **kwargs)
    270 elif self.type == 'section':
--> 271     self.plot_section(*args, **kwargs)
    272 else:
    273     self.plot(*args, **kwargs)

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\imaging\waveform.py:1075, in WaveformPlotting.plot_section(self, *args, **kwargs)
   1071 """
   1072 Plots multiple waveforms as a record section on a single plot.
   1073 """
   1074 # Initialise data and plot
-> 1075 self.__sect_init_traces()
   1076 ax, lines = self.__sect_init_plot()
   1078 # Setting up line properties

File ~\anaconda3\envs\obspy\lib\site-packages\obspy\imaging\waveform.py:1175, in WaveformPlotting.__sect_init_traces(self)
   1171     except Exception:
   1172         msg = 'trace.stats.distance undefined ' +\
   1173               '(set before plotting [in m], ' +\
   1174               'or use the ev_coords argument)'
-> 1175         raise ValueError(msg)
   1176 else:
   1177     # Define offset as degree from epicenter
   1178     try:

ValueError: trace.stats.distance undefined (set before plotting [in m], or use the ev_coords argument)

<Figure size 1000x600 with 0 Axes>

tr.stats gives the following, the units is in meters

`network: 
         station: 
        location: 
         channel: 
       starttime: 1970-01-01T00:00:00.000000Z
         endtime: 1970-01-01T00:00:01.999750Z
   sampling_rate: 4000.0
           delta: 0.00025
            npts: 8000
           calib: 1.0
         _format: SEG2
            seg2: AttribDict({'TRACE_SORT': 'AS_ACQUIRED', 'UNITS': 'METERS', 'CDP_NUMBER': '0', 'CDP_TRACE': '0', 'DELAY': '0', 'DIGITAL_HIGH_CUT_FILTER': '0', 'DIGITAL_LOW_CUT_FILTER': '0', 'RECEIVER_GEOMETRY': '2.500000 0.000000 0.000000', 'RECEIVER_LOCATION': '2.500000 0.000000 0.000000', 'RECEIVER_STATION_NUMBER': '0', 'SAMPLE_INTERVAL': '0.00025', 'SHOT_SEQUENCE_NUMBER': '1', 'SOURCE_LOCATION': '0.000000 0.000000 0.000000', 'SOURCE_STATION_NUMBER': '0'})`

If your data is segy i recomend you using seismic unix, its free and its very good for plotting and manipulating data.

Please do not spam the board with multiple topics linking to the same topic.

The error message seems fairly explanatory. Did you do as the error message suggests:

ValueError: trace.stats.distance undefined (set before plotting [in m], or use the ev_coords argument)

Your stats seem to show that tr.stats.distance is not set. As the error message says, set tr.stats.distance before plotting.

2 Likes