[英]ValueError: too many values to unpack (expected 1)?
我不断收到“ ValueError: too many values to unpack (expected 1) ”
它说错误发生在p2, = plt.plot(t, p, 'g--', label='Approx')
,但我看不出该行有问题。 我如何解决它?
def g(x):
return x * np.sin(1/x)
x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
p = np.array([g(x) for i in range(len(t))])
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)
p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()
我看到两个问题,您看到的错误是由于您的p
变量位于单个元素列表中,因此您可以解压缩它。
第二个问题是t
和p
的长度不同,我不知道如何在不知道你的目标的情况下解决这个问题。
import numpy as np
import matplotlib.pyplot as plt
def g(x):
return x * np.sin(1/x)
x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
p = np.array([g(x) for i in range(len(t))])[0]
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)
print('t')
print(t)
print('p')
print(p)
p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()
问题是您的plt.plot(t, p, 'g--', label='Approx')
由 30 个matplotlib.lines.Line2D
对象组成,但您试图将其分配给长度为1.
如果您只需要该plt.plot(t, p, 'g--', label='Approx')
中的第一个元素(并且您需要,如果您只需要在图例中显示),只需获取第一个元素.
p2 = plt.plot(t, p, 'g--', label='Approx')[0]
更好的是,对所有 3 个地块都这样做
由于列表和 np.array 之间的差异,会出现问题。 它们的行为非常不同。
import numpy as np
import matplotlib.pyplot as plt
def g(x):
return x * np.sin(1/x)
x = np.linspace(-1, 1, 30)
y = g(x)
t = np.linspace(np.min(x), np.max(x), 100)
a = [i for i in range(len(t))]
a = np.array(a)
p = g(a)
xx = np.linspace(np.min(x), np.max(x), 100)
yy = g(xx)
plt.figure(1)
p1, = plt.plot(x, y, 'ro', label='Data points')
p2, = plt.plot(t, p, 'g--', label='Approx')
p3, = plt.plot(xx, yy, 'blue', label='Real')
plt.legend(handles=[p1, p2, p3], loc='best')
plt.xlabel('t')
plt.ylabel('g(x)')
plt.grid(True)
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.