python地震数据可视化详解
作者:幻影03 发布时间:2021-05-14 15:41:52
本文实例为大家分享了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数据绘图结果
如下:
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相关数据绘图
速度模型绘图结果如下:
marmousi模型正演的炮集数据绘图结果如下:
测试备忘
1
cygwin执行指令,可以看到反馈信息为彩色,分析信息很方便。
相比之下,cmd终端执行指令后的反馈信息可读性较差。
2
本地数据出现异常后,通过cwp中的segyread, sushw, sugain, segywrite等程序进行修改,满足绘图程序要求。
1)3200字节的卷头必须规范
2)道头字中的cdpt取值必须规范(xline)
3)道采样值最好归一化处理。
来源:https://blog.csdn.net/sinat_27917465/article/details/86517738
猜你喜欢
- 一、前言三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学
- 在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题。在今天的文章里,我想从性能角度进一步谈下书签查找,还
- 从概念上讲,大多数关系数据库系统都是类似的:它们都由一组数据库组成,且每个数据库都包含一组表。但是,所有的系统都有自己的管理数据的方法, M
- 一、简介1、概述因为信息是展现在命令行中的,众所周知,命令行展现复杂的文本看起来着实累人,于是就想着能像表格那样展示,那看起来就舒服多了。p
- 一、XGBoostXGBoost并不是一种模型,而是一个可供用户轻松解决分类、回归或排序问题的软件包。1 XGBoost的优点简单易用。相对
- js中没有foreach这个关键字,但是可以用var v in array来实现遍历。但是需要注意的是, 拿到的是key而不是value。看
- 需求:实现ajax请求,在界面上任意地方点击,可以成功传参。创建项目如下所示:settings.py文件的设置,这次我们除了要注册app和设
- python正则表达式括号python中re库函数的简单用法re.findall(pattern,string)匹配所有符合正则表达式的字符
- 事实上,互联网用户浏览网页的习惯和顾客浏览商店中物品的习惯没有多大差别。用户打开一个新的页面,扫视一些文字,并点击第一个引起他兴趣的链接。在
- 下面写一个给大家做参考啊 create procedure sp_find(pfind varchar(500) BEGIN DECLAR
- 因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来。首先我的编程环境是:windows 10系统python
- 前言大家应该都知道,我们在mysql运维中出现过不少因为update/delete条件错误导致数据被误更新或者删除的case,为避免类似问题
- 含义切片是一个种特殊的数组。是对数组的一个连续片段的引用,所以切片是一个引用类型。切片可以是数组中的一部分,也可以是由起始和终止索引标识的一
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 快到 520 了,分享几段 520 专属 Python 代码,不多说了,下面直接上货。No.1效果:主要代码:import tur
- 问题描述:用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率
- 若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的。特别是多个连续空格会被当做一个处理。[root@localh
- 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了。但群发消息不仅仅会把通讯录里面所有的好友骚扰
- switch语句可以让一个变量对反对值的列表平等进行测试。每个值被称为一个的情况(case),变量被接通检查每个开关盒(switch cas
- 1.安装登陆确认mysql已经开启2.建库3.建表Create 数据库表右击选择Create Table,填写Table Name,Comm