Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的obspy模块中的图形注释_Python_Annotations - Fatal编程技术网

Python的obspy模块中的图形注释

Python的obspy模块中的图形注释,python,annotations,Python,Annotations,我对python非常陌生,如果我下面的尝试非常糟糕,那么很抱歉。我已经尝试尽可能多地包含信息,如果没有用于运行脚本的数据副本,很难解决问题 问题: on_off Out[95]: array([[1145, 1660]]) t1 Out[92]: 2015-12-08T06:03:20.000000Z t1+(on_off[0,0]/df) Out[93]: 2015-12-08T06:03:42.900000Z t1+(on_off[0,0]/df)+5 Out[94]: 2015-12

我对python非常陌生,如果我下面的尝试非常糟糕,那么很抱歉。我已经尝试尽可能多地包含信息,如果没有用于运行脚本的数据副本,很难解决问题

问题:

on_off
Out[95]: array([[1145, 1660]])

t1
Out[92]: 2015-12-08T06:03:20.000000Z

t1+(on_off[0,0]/df)
Out[93]: 2015-12-08T06:03:42.900000Z

t1+(on_off[0,0]/df)+5
Out[94]: 2015-12-08T06:03:47.900000Z
我试图在使用obspy生成的图形上注释点,其中x轴在UTCdatetime中

常规设置

# Retrieve modules needed
from obspy.core import read
from obspy import UTCDateTime
from obspy.signal.trigger import classicSTALTA, recSTALTA, zDetect, plotTrigger, triggerOnset
from obspy.signal.filter import envelope

#path1 = 'rawdata/2015/EC/'
path1 = '../rawdata/2015/EC/'
station = 'BREF'
component = 'BHZ.D'
file = 'EC.BREF..BHZ.D.2015.342'
str1 = read(path1+station+'/'+component+'/'+file)

#sampling rate
df = str2[0].stats.sampling_rate

#crop for one test
t1 = UTCDateTime("2015-12-08T06:03:20.000000Z")

# other modules I might need
import numpy as np
import matplotlib.pyplot as plt
失败的实际注释节

我知道这段代码可能很混乱,但我找不到任何关于如何在obspy中注释的好文档。希望比我更了解python的人能做出有根据的猜测

fig = plt.figure()
str1.plot(color='b', starttime=t1, endtime=t1+40, number_of_ticks=10)

ax = fig.add_subplot(111)
ax.annotate('local max', xy=(t1+(on_off[0,0]/df),0), xytext=(t1+(on_off[0,0]/df)+5,0),
            arrowprops=dict(facecolor='black', shrink=1),
            )
plt.show()
其中on_off是我标记的x点列表,以样本为单位测量-so samplenum/samplingrate=(从t1开始的秒数)

以下是输出:

更多信息:

on_off
Out[95]: array([[1145, 1660]])

t1
Out[92]: 2015-12-08T06:03:20.000000Z

t1+(on_off[0,0]/df)
Out[93]: 2015-12-08T06:03:42.900000Z

t1+(on_off[0,0]/df)+5
Out[94]: 2015-12-08T06:03:47.900000Z
进步: 我真的希望有一条粗的水平线,长度与我想要突出显示的部分相同,并带有相关的文本注释。然而,箭头和标签是我能找到的唯一一个例子,所以这就是我目前正在做的。如果有一个简单的方法来画两点之间的水平线+文本框,那就更好了


感谢您的帮助

我花了一段时间研究了这个问题,发现最好的方法是重新分配数据并使用matplotlib而不是内置的obspy模块绘图仪进行绘图,因为它们更多地被设计为“预览”窗格,而不是最终图形

我不确定它是否完全符合上面的代码,但我现在使用的代码允许对图形进行注释:

fig = plt.figure()
data = str2[0].data
plt.plot(data)
plt.hold(True) #equivalent of matlab hold on   
plt.axvline(x=on_off[0,0], c='r')
npts2 = str2[0].stats.npts
plt.title(str2[0].stats.starttime)
l = plt.axhline(y=-4000, xmin=on_off[0,0]/npts2, xmax=on_off[0,1]/npts2, linewidth=4, color='r')
plt.show()
输出显示在此处:

on_off
Out[95]: array([[1145, 1660]])

t1
Out[92]: 2015-12-08T06:03:20.000000Z

t1+(on_off[0,0]/df)
Out[93]: 2015-12-08T06:03:42.900000Z

t1+(on_off[0,0]/df)+5
Out[94]: 2015-12-08T06:03:47.900000Z

更多信息:

on_off
Out[95]: array([[1145, 1660]])

t1
Out[92]: 2015-12-08T06:03:20.000000Z

t1+(on_off[0,0]/df)
Out[93]: 2015-12-08T06:03:42.900000Z

t1+(on_off[0,0]/df)+5
Out[94]: 2015-12-08T06:03:47.900000Z
可在此处找到一个提供更多注释选项的优秀网页: