为我将将第二张图的画图方式改为pcolor,并模拟运行结果# -- coding: utf-8 -- """ Created on Thu Jun 1 17:06:08 2023 @author: Rayquaza """ import numpy as np import matplotlib.pyplot as plt def ricker(f, length, dt): t = np.arange(-length/2,(length-dt)/2, dt) y = (1.0 - 2.0*(np.pi2)(f2)(t2)) * np.exp(-(np.pi2)(f2)(t2)) return t,y Frequency = 20 length = 0.128 dt = 0.001 t0, w0 = ricker(Frequency, length, dt) rho = np.array([1.6, 2.4, 1.8]) v = np.array([2000, 3000, 2200]) x = np.arange(0, 500, 1) t = np.arange(0, 0.3, dt) Z = rho*v d_model = np.zeros((2, 500)) for i in range(500): d_model[0, i] = 200 if i < 50: d_model[1, i] = 200 elif i < 250 and i >= 50: d_model[1, i] = 200 + (i-50) elif i >=250: d_model[1, i] = 400 t1 = np.zeros((2, 500)) t1[0, :] = d_model[0,:] / v[1] for i in range(500): t1[1, i] = (d_model[1, i] - d_model[0, i]) / v[2] + t1[0, i] L = np.zeros(2) for i in range(2): L[i] = (Z[i+1] - Z[i]) / (Z[i+1] + Z[i]) L1 = np.zeros([300, 500]) for i in range(2): for j in range(500): if j < 50: L1[int(np.round(t1[i,j]/dt)),j] = (Z[2]-Z[0]) / (Z[2]+Z[0]) else: L1[int(np.round(t1[i,j]/dt)),j] = L[i] syn = np.zeros((300, 500)) for j in range(500): syn[: , j] = np.convolve(L1[:,j], w0, 'same') fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(18, 9)) axes[0].plot(w0, t0, 'b-') axes[0].xaxis.set_ticks_position('top') axes[0].invert_yaxis() axes[0].set_title("Amplitude", fontsize = 12) axes[0].set_ylabel("Time(s)",fontsize = 12) X, T = np.meshgrid(x, t) c = axes[1].contour(X, T, L1) axes[1].xaxis.set_ticks_position('top') axes[1].invert_yaxis() axes[1].set_title("Reflection Coefficient", fontsize = 12) axes[1].set_ylabel("Eight-Way Travel Time(s)",fontsize = 12) c_map = axes[2].pcolormesh(X, T, syn, cmap='bwr', shading='auto') axes[2].xaxis.set_ticks_position('top') axes[2].invert_yaxis() axes[2].set_xlabel("Amplitude", fontsize = 12) axes[2].set_ylabel("Two-Way Travel Time(s)",fontsize = 12) fig.colorbar(c_map, ax=axes[2]) fig.suptitle('Two-Layer Synthetic Seismogram', fontsize = 18) plt.tight_layout() plt.show()
时间: 2024-01-30 12:03:13 浏览: 97
好的,我已经理解了你的要求。下面是修改后的代码:
```python
# -- coding: utf-8 --
"""
Created on Thu Jun 1 17:06:08 2023
@author: Rayquaza
"""
import numpy as np
import matplotlib.pyplot as plt
def ricker(f, length, dt):
t = np.arange(-length/2,(length-dt)/2, dt)
y = (1.0 - 2.0
相关问题
fmts=('-', 'm--', 'g-.', 'r:')
fmts=('-', 'm--', 'g-.', 'r:') 是用于指定绘图线条样式的参数。它是一个包含了4个字符串的元组,每个字符串代表一种线条样式。
具体介绍如下:
1. '-':实线样式,表示用实线绘制线条。
2. 'm--':虚线样式,表示用虚线绘制线条,虚线由短线和空格交替组成。
3. 'g-.':点划线样式,表示用点划线绘制线条,点划线由点和短线交替组成。
4. 'r:':点线样式,表示用点线绘制线条,点线由点和空格交替组成。
这些样式可以用于绘制不同的曲线或者在同一张图中区分不同的数据系列。例如,可以使用不同的样式来表示不同的数据趋势或者不同的实验条件。
semilogy(t, curve_pso/cnt_max, 'bo-', t, curve_gwo/cnt_max, 'k*-', t, curve_igwo/cnt_max, 'mx-',... t, curve_pso_gwo/cnt_max, 'r-', 1:50:maxgen);
这是一段Matlab代码,它使用了`semilogy`函数绘制了4条曲线。具体解释如下:
```matlab
semilogy(t, curve_pso/cnt_max, 'bo-', t, curve_gwo/cnt_max, 'k*-', t, curve_igwo/cnt_max, 'mx-',... t, curve_pso_gwo/cnt_max, 'r-', 1:50:maxgen);
```
- `t`是横轴数据,表示时间或者迭代次数。
- `curve_pso/cnt_max`表示纵轴数据,`curve_pso`、`curve_gwo`、`curve_igwo`和`curve_pso_gwo`是对应的4条曲线的纵轴数据。`cnt_max`是数据最大值,是为了保证纵坐标在较小的范围内而做的归一化处理。
- `'bo-'`、`'k*-'`、`'mx-'`和`'r-'`是4条曲线的格式,表示颜色、线型和标记的种类。`b`、`k`、`m`和`r`分别表示蓝色、黑色、洋红色和红色,`o`、`*`和`x`分别表示圆形、星形和叉形,`-`表示实线。所以`'bo-'`表示蓝色的圆形实线,`'k*-'`表示黑色的星形实线,`'mx-'`表示洋红色的叉形实线,`'r-'`表示红色的实线。
- `1:50:maxgen`表示横坐标的范围,从1开始,步长为50,直到`maxgen`为止。
这段代码的作用是在同一张图中绘制4条曲线,方便进行比较和分析。由于使用了`semilogy`函数,所以纵坐标是以对数刻度显示的。
阅读全文