python地震数据可视化详解


Posted in Python onJune 18, 2019

本文实例为大家分享了python地震数据可视化的具体代码,供大家参考,具体内容如下

参考源码:seisplot

准备工作:

在windows10下安装python3.7,下载参考源码到本地。

1. demo绘图测试

demo绘图指令

cmd> python seisplot.py --demo

问题1)缺少依赖包

File "D:/Desktop/python可视化/seisplot/seisplot.py", line 16, in <module>
 import yaml
ModuleNotFoundError: No module named 'yaml'
 
>pip3 install yaml
 Could not find a version that satisfies the requirement yaml (from versions: )
No matching distribution found for yaml

查看environment.yml:

channels:
- defaults
- conda-forge
dependencies:
- matplotlib
- numpy
- obspy
- pillow
- pyyaml

安装相关依赖包,如 obspy pillow pyyaml 

cmd> pip3 install obspy

出现proxy error, 添加选项 --proxy server:port

安装ok

问题2)配置文件的编码异常

D:\Desktop\python可视化\seisplot>python seisplot.py --demo
[91m
 Welcome to
 ┌─┐┌─┐┬┌─┐┌─┐┬ ┌─┐┌┬┐
 └─┐├┤ │└─┐├─┘│ │ │ │
 └─┘└─┘┴└─┘┴ ┴─┘└─┘ ┴
    Good luck[0m
Traceback (most recent call last):
 File "seisplot.py", line 421, in <module>
 cfg = yaml.load(f)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\__init__.py", line 70, in load
 loader = Loader(stream)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\loader.py", line 34, in __init__
 Reader.__init__(self, stream)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 85, in __init__
 self.determine_encoding()
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 124, in determine_encoding
 self.update_raw()
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 178, in update_raw
 data = self.stream.read(size)
UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 2003: illegal multibyte sequence

分析源码中参数传递情况:

def load(stream, Loader=Loader):
 """
 Parse the first YAML document in a stream
 and produce the corresponding Python object.
 """
 print(stream) ## debug by huanying03
 loader = Loader(stream)
 try:
  return loader.get_single_data()
 finally:
  loader.dispose()

打印结果如下:

<_io.TextIOWrapper name='config.yml' mode='r' encoding='cp936'>

编码不对?

65001  :UTF-8代码页

936 :默认的GBK

437 :是美国英语

仔细检查发现config.yml中有异常字符,更正config.yml中错误字符:ok

问题3)python调试打印语句

print ("value=%d"%value)

demo数据绘图结果

如下:

python地震数据可视化详解

2. 本地数据绘图测试

应用指令

cmd > python seisplot.py data/my.sgy

问题1)数据道的采样值异常

filename data2/t10.sgy
seismic.py:104:dt=4000
seismic.py:104:ns=512
seismic.py:144:header=b'C 1 CLIENT'
n_traces 500
n_samples 512
dt   0.004
t_start 0
t_end  2.044
max_val inf
min_val -inf
clip_val 180462501764003194804057887685476352
Read data in 0.4 s
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PLOTTING
plot width 17.00 in
plot height 11.00 in
Traceback (most recent call last):
 File "seisplot.py", line 442, in <module>
 main(t, cfg)
 File "seisplot.py", line 214, in main
 cfg)
 File "D:\Desktop\python可视化\seisplot\plotter.py", line 123, in plot_histogram
 y, x, _ = ax.hist(np.ravel(data), bins=int(100.0 / (clip_val / largest)),
OverflowError: cannot convert float infinity to integer

解决办法:将数据做归一化处理

问题2)数据文件的卷头异常

filename data2/marmousi_vel.segy.hdrs.sgy.cdp.sgy
seismic.py:104:dt=10000
seismic.py:104:ns=350
seismic.py:144:header=b'\xc3@\xf1@\xc3\xd3\xc9\xc5\xd5\xe3'
Traceback (most recent call last):
 File "seisplot.py", line 442, in <module>
 main(t, cfg)
 File "seisplot.py", line 40, in main
 s = Seismic.from_segy(target, params={'ndim': cfg['ndim']})
 File "D:\Desktop\python可视化\seisplot\seismic.py", line 164, in from_segy
 return cls.from_obspy(stream, params=params)
 File "D:\Desktop\python可视化\seisplot\seismic.py", line 147, in from_obspy
 x =np.array(list(stream.textual_file_header.decode()))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte

解决办法:重写3200字节的segy卷头

marmousi相关数据绘图

速度模型绘图结果如下:

python地震数据可视化详解

marmousi模型正演的炮集数据绘图结果如下:

python地震数据可视化详解

测试备忘

1

cygwin执行指令,可以看到反馈信息为彩色,分析信息很方便。

相比之下,cmd终端执行指令后的反馈信息可读性较差。

2

本地数据出现异常后,通过cwp中的segyread, sushw, sugain, segywrite等程序进行修改,满足绘图程序要求。

1)3200字节的卷头必须规范

2)道头字中的cdpt取值必须规范(xline)

3)道采样值最好归一化处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用HTMLParser解析html实例
Feb 08 Python
Python创建系统目录的方法
Mar 11 Python
深入理解Python变量与常量
Jun 02 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python实现贪吃蛇小游戏
Mar 21 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
Python 实现微信自动回复的方法
Sep 11 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
Python实现FM算法解析
Jun 18 #Python
python pygame实现五子棋小游戏
Oct 26 #Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 #Python
python制作简单五子棋游戏
Jun 18 #Python
Python利用pandas处理Excel数据的应用详解
Jun 18 #Python
PyQt5固定窗口大小的方法
Jun 18 #Python
Python格式化字符串f-string概览(小结)
Jun 18 #Python
You might like
php验证码的制作思路和实现方法
2015/11/12 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
JS实现购物车特效
2017/02/02 Javascript
JS验证不重复验证码
2017/02/10 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
仅利用30行Python代码来展示X算法
2015/04/01 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
Python如何读写CSV文件
2020/08/13 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
商务英语专业毕业生自荐信
2013/11/05 职场文书
会计自荐书
2013/12/02 职场文书
趣味活动策划方案
2014/02/08 职场文书
春节联欢会策划方案
2014/05/16 职场文书
班风口号
2014/06/18 职场文书
营销总监岗位职责
2014/09/16 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
起诉状范本
2015/05/20 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
浅析Django接口版本控制
2021/06/26 Python