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 绘图库 Matplotlib 入门教程
Apr 19 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
详解python中@的用法
Mar 27 Python
Django REST framework 分页的实现代码
Jun 19 Python
python保存字典和读取字典的实例代码
Jul 07 Python
Python高级property属性用法实例分析
Nov 19 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
python+selenium实现12306模拟登录的步骤
Jan 21 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获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
10个简化PHP开发的工具
2014/12/25 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
浅析Ajax语法
2016/12/05 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
Python中文件操作简明介绍
2015/04/13 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Python callable内置函数原理解析
2020/03/05 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
如何一键升级Python所有包
2020/11/05 Python
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
服装厂厂长岗位职责
2013/12/27 职场文书
会议室标语
2014/06/21 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
环卫工人慰问信
2015/02/15 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server
Mysql 一主多从的部署
2022/05/20 MySQL