【问题标题】:Plot circle displacement in python在python中绘制圆位移
【发布时间】:2021-01-19 08:12:30
【问题描述】:

我正在尝试创建一个看起来像图片的情节。

Wave Particle Motions under Wave

这不是家庭作业,我正在尝试这样做以获得经验。

我有以下参数:

在水深的槽(波高剖面上的最低点)下绘制水粒子运动 从平均水线以下 0 到 100 米,增量为 10 m。

在时间 = 0 时,随空间变化的波形为 ??????(????) = ????cos(????x)。首先绘制此波形一波。

????(????) = ????*cos(????x) #at time = 0

接下来计算 0 到 100m 不同水深的垂直和水平粒子位移

XDisp = -A * e**(k*z) * np.sin(-w*t)
YDisp = -A * e**(k*z) * np.cos(-w*t) # when x=0

你可以使用任何 x。 运动幅度不会改变。其中 z 是低于平均水位的深度。所有其他参数都在前面的问题中定义。

不要忘记将水平粒子位移移动到槽下方和水线下方的“z”以进行垂直粒子位移。

这是我的代码,但我做错了什么。我的情节看起来像这个例子,但我的圈子不对。我认为这与 x&y 显示有关。

import numpy as np
import matplotlib.pyplot as plt

A = 1  # Wave amplitude in meters
T = 10  # Time Period in secs
n_w = 1 # Number of waves
wavelength = 156  # Wavelength in meters

# Wave Number
k = (2 * np.pi) / wavelength
# Wave angular frequency
w = (2 * np.pi) / T

def XDisp(z,t):
    return -A * np.e**(k * z) * np.sin(-w * t)

def YDisp(z,t):
    return -A * np.e**(k * z) * np.cos(-w * t)

def wave_elevation(x):
    return A * np.cos(k * x)

t_list = np.array([0,0.25,0.5,0.75,1.0])*T

z = [0,-10,-20,-30,-40,-50,-60,-70,-80,-90,-100]
A_d = []
x_plot2 = []
for i in z:
    A_d.append(A * np.e**(k * i))
    x_plot2.append(wavelength/2)

x_plot = np.linspace(0,wavelength)
Y_plot = []
for i in x_plot:
    Y_plot.append(wave_elevation(i))

plt.plot(x_plot,Y_plot,'.-r')
plt.scatter(x_plot2,z,s= A_d, facecolors = 'none',edgecolors = 'b',marker='o',linewidth=2)
plt.xlabel('X (m)')
plt.ylabel("\u03B7 & Water Depth")
plt.title('Wave Particle Motions Under Wave')
plt.legend()
plt.grid()
plt.show()

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    我担心提供的信息,我不遵循问题的科学部分,但如果您在标记大小方面遇到问题,您可以将一个大小数组作为plt.scatter 的第三个参数。我认为这段代码可能会对您有所帮助,尽管我稍微更改了您的代码以使其更简单

    import numpy as np
    import matplotlib.pyplot as plt
    
    A = 1  # Wave amplitude in meters
    T = 10  # Time Period in secs
    n_w = 1 # Number of waves
    wavelength = 156  # Wavelength in meters
    k = (2 * np.pi) / wavelength # Wave Number
    w = (2 * np.pi) / T # Wave angular frequency
    
    def wave_elevation(x):
        return A * np.cos(k * x)
    
    A_d = [] # marker size
    x2 = [] # for particle place on x axis which is wavelength/2
    y2 = [] # for particle place on y axis
    for i in range(0,100,10):
        x2.append(wavelength/2)
        y2.append(-i)
        A_d.append(15 * np.exp(-k * i)) # here I change A to 15
        
    x = []
    y = []
    for i in range(0,wavelength):
        x.append(i)
        y.append(wave_elevation(i))
    plt.plot(x,y,'red')
    plt.scatter(x2,y2,A_d)
    plt.ylim(-100, 10)
    plt.xlabel('X (m)')
    plt.ylabel("\u03B7 & Water Depth")
    plt.title('Wave Particle Motions Under Wave')
    plt.grid()
    plt.show()
    

    【讨论】:

    • 它无法正常工作。它使圆圈成为实心的,顶部圆圈的直径应该与线接触。这就是为什么我需要使用 XDisp 和 YDisp。但我不知道怎么做。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多