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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python中super关键字用法实例分析
May 28 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
python中reload(module)的用法示例详解
Sep 15 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
python requests爬取高德地图数据的实例
Nov 10 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
python2和python3在处理字符串上的区别详解
May 29 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 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
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
有关php运算符的知识大全
2011/11/03 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
Python类的用法实例浅析
2015/05/27 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
肯尼迪就职演说稿
2013/12/31 职场文书
测控技术自荐信
2014/06/05 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python
Python中的socket网络模块介绍
2022/07/23 Python