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