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编程实现语音控制电脑
Apr 01 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
简单了解python反射机制的一些知识
Jul 13 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
基于OpenCV的路面质量检测的实现
Nov 04 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
python实现简易自习室座位预约系统
Jun 30 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
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
Apache2 httpd.conf 中文版
2006/11/17 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python做简单的字符串匹配详解
2017/03/21 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python使用selenium实现批量文件下载
2019/03/11 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
巴西网上药房:onofre
2016/11/21 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
客户代表实习人员自我鉴定
2013/09/27 职场文书
小学教师的个人自我鉴定
2013/10/26 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
博士生专家推荐信
2014/09/26 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
MySQL详细讲解变量variables的用法
2022/06/21 MySQL