使用matplotlib在Python中进行参数化绘图

时间:2018-04-21 05:09:56

标签: python python-2.7 matplotlib

我试图在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循环中进行了绘制,为什么会发生这种情况呢?

1 个答案:

答案 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()
相关问题