我对焦点机制(沙滩球)很新,并希望使用Python将它们绘制到全局地图上。
我已经安装了Anaconda套件,并且想知道我是否需要安装任何其他模块才能实现这一功能(即Anaconda套件中包含的obspy模块?
我不会使用任何特定的地震学文件作为输入,但只想通过手动插入相应的参数来创建这些沙滩球。到目前为止,我遇到了两个不同的代码示例:
from obspy.imaging.beachball import beachball
np1 = [150, 87, 1]
beachball(np1)
和...
from obspy.imaging.beachball import beachball
mt = [-2.39, 1.04, 1.35, 0.57, -2.94, -0.94]
beachball(mt)
我不清楚这些值中的每一个是指什么。我有一个网站示例,我想从中检索相关信息,然后使用这些值作为沙滩球的输入:
http://earthquake.usgs.gov/earthquakes/eventpage/us20005ysu#moment-tensor
提前致谢。
答案 0 :(得分:0)
此处,地震源通过moment tensor组件描述
mt = [-2.39,1.04,1.35,0.57,-2.94,-0.94]
这里,使用节点平面描述聚焦机制。有两个节点平面 - 主要和辅助。在下面的示例中,主要的一个作为输入给出,辅助的一个是自动计算的。节点平面的方向有三个角度[Strike,Dip,Rake]
np1 = [150,87,1]
根据opensha.org:
<强>击强>: 断层走向是由断层面与水平面相交形成的线的方向,相对于北面为0°至360°。始终定义打击,使得当沿着打击方向沿着轨迹移动时,故障下降到迹线的右侧。因此,故障的悬壁块总是在右侧,而下盘则在左侧。这很重要,因为耙子(它给出了滑移方向)被定义为悬挂墙相对于下盘块的运动。
<强>浸强>: 断层倾角是断层与水平面之间的角度,0°至90°。
<强>耙强>: 耙是在破裂期间悬挂墙块移动的方向,如在断层平面上测量的。它是相对于故障触发测量的,±180°。对于站在断层上并观察击球方向的观察者,0°的耙意味着悬挂墙或垂直断层的右侧在击打方向上移动远离观察者(左侧向运动)。 ±180°的耙子意味着悬挂墙向观察者移动(右侧向运动)。对于任何耙角> 0,悬挂墙向上移动,指示断层上的推力或反向运动;对于任何耙角<0°,悬挂墙向下移动,表明断层正常运动。
我以这种方式将Obspy安装到Anaconda
~/anaconda/bin/pip install obspy
执行此操作后,您提供的代码可以正常工作:
from obspy.imaging.beachball import beachball
mt = [-2.39, 1.04, 1.35, 0.57, -2.94, -0.94]
beachball(mt)
答案 1 :(得分:0)
我们的教程提供了包括沙滩球补丁的地图的示例:
或查看我们更新的主分支教程:
http://docs.obspy.org/master/tutorial/code_snippets/basemap_plot_with_beachballs.html
你可以在那里找到一些你可以找到这些代码的例子来绘制底图上的时刻张量(当然投影可以根据你的喜好改变):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from obspy import read_events
from obspy.imaging.beachball import beach
event = read_events(
'https://earthquake.usgs.gov/archive/product/moment-tensor/'
'us_20005ysu_mww/us/1470868224040/quakeml.xml', format='QUAKEML')[0]
origin = event.preferred_origin() or event.origins[0]
focmec = event.preferred_focal_mechanism() or event.focal_mechanisms[0]
tensor = focmec.moment_tensor.tensor
moment_list = [tensor.m_rr, tensor.m_tt, tensor.m_pp,
tensor.m_rt, tensor.m_rp, tensor.m_tp]
m = Basemap(projection='cyl', lon_0=origin.longitude, lat_0=origin.latitude,
resolution='c')
m.drawcoastlines()
m.fillcontinents()
m.drawparallels(np.arange(-90., 120., 30.))
m.drawmeridians(np.arange(0., 420., 60.))
m.drawmapboundary()
x, y = m(origin.longitude, origin.latitude)
ax = plt.gca()
b = beach(moment_list, xy=(x, y), width=20, linewidth=1, alpha=0.85)
b.set_zorder(10)
ax.add_collection(b)
plt.show()
您需要为此安装basemap
包(conda install basemap
)。