我正在尝试使用 Python 2.7 中的 matplotlib 以参数方式绘制两个时间函数。这是我尝试在代码中执行的操作:
import matplotlib.pyplot as plt
import numpy as np
def x(t, x_0, w):
return x_0*np.cos(w*t)
def x_prime(t, x_0, w):
return -x_0*w*np.sin(w*t)
# for x_0 = w = 1:
t_range = np.arange(0, 2*np.pi, np.pi/4)
for t in t_range:
plt.plot(x(t, 1, 1), x_prime(t, 1, 1))
plt.show()
但是,我的绘图上没有显示任何内容。轴已标记,但没有绘制任何图形。我之前在 for 循环中绘制过,没有任何问题,那么为什么会在这里发生这种情况?
最佳答案
for循环是你的问题。
这里:
plt.plot(x(t, 1, 1), x_prime(t, 1, 1))
由于 for 循环,t 是一个值而不是一个列表,因此您尝试绘制的 X 和 y 只是单独的点。如果您不指定单个点的标记大小和标记,则 matplotlib 上不会显示单个点。您可以通过一次绘制所有点以形成一条线来解决此问题:
def x(t, x_0, w):
print(x)
return x_0*np.cos(w*t)
def x_prime(t, x_0, w):
return -x_0*w*np.sin(w*t)
t_range = np.arange(0, 2*np.pi, np.pi/4)
plt.plot(x(t_range, 1, 1), x_prime(t_range, 1, 1))
plt.show()
如果您仍然想使用 for-loop 方法来绘制点,则需要添加额外的参数:
t_range = np.arange(0, 2*np.pi, np.pi/4)
for t in t_range:
print(x(t, 1, 1,), x_prime(t, 1, 1))
plt.plot(x(t, 1, 1), x_prime(t, 1, 1), markersize=3, marker='o')
plt.show()
编辑:要使其一直运行,您只需将第一个点再次添加到数组的末尾即可:
a = x_prime(t_range, 1, 1)
b = x(t_range, 1, 1)
a = np.append(a, [a[0]])
b = np.append(b, [b[0]])
plt.plot(a, b)
plt.show()
关于python - 使用 matplotlib 在 Python 中绘制参数图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952574/