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 ElementTree 基本读操作示例
Apr 09 Python
Python是编译运行的验证方法
Jan 30 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Python类的继承用法示例
Jan 31 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
查看端口并杀进程python脚本代码
Dec 17 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Python列表如何更新值
May 27 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 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中动态HTML的输出技术
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php时间计算相关问题小结
2016/05/09 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PDO::commit讲解
2019/01/27 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
python求列表交集的方法汇总
2014/11/10 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python实现维吉尼亚算法
2019/03/20 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
网上卖盒饭创业计划书范文
2014/02/07 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
离职报告格式
2014/11/04 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
小学六年级毕业感言
2015/07/30 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
python 爬取华为应用市场评论
2021/05/29 Python
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript