我试图在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循环中进行了绘制,为什么会发生这种情况呢?
答案 0 :(得分:2)
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()