使用返回两个列表的函数作为plt.plot的参数



绘制返回两个列表的函数。我绘制它的第一种方法很好,第二种方法得到了一个奇怪的多色图。为什么python对这两者的解释不同?

import numpy as np
import matplotlib.pyplot as plt

def Triangle():
x_values = [0.0]
y_values = [0.0]
pos_step = 0
neg_step = 0
for x in range(0, 100):
pos_step += .01
neg_step -= .01
x_values.append(pos_step)
x_values.append(neg_step)
y_values.append(pos_step)
y_values.append(neg_step)

x_values.sort()
y_values.sort()  
y_values = [abs(x) for x in y_values]

return x_values, y_values
x,y = Triangle()
plt.plot(x, y)
plt.show()

plt.plot(Triangle())
plt.show()

因为在第一个选项中,您要拆包值。让我解释一下:

x, y = something()

此函数返回一个包含两个值的元组,但使用所示语法将元组分离为两个自变量(xy(。

z = something()

另一方面,我们有相同的函数,返回包含两个值的元组。但你不会打开它们。所以现在,z包含一个元组(由两个元素组成,但仍然是一个元组(。

问题是,您试图使用plt.plot()提供两个值,但在第二种情况下,您只提供了一个元组。该函数仍然可以工作,因为它需要任意数量的参数,并且可以通过它来创建绘图。

你能做什么?将拆包步骤移至plt.plot():plt.plot(*something())。这个SO问题包含了许多关于使用此语法的有用信息:**(双星/星号(和*(星/星号(对参数有什么作用?。

最新更新