如何在Python3中在同一绘图上绘制多个对象的实例属性
我有一个类,它从我制定的数学方程中生成数据列表,以模拟一个系统随时间的变化。该类可以对方程中的不同变量采用不同的数字,因此可以从该类创建具有不同模型输出的对象。我想在同一个绘图上绘制不同对象的输出,但当我尝试这样做时,我得到以下错误:如何在Python3中在同一绘图上绘制多个对象的实例属性,python,python-3.x,oop,matplotlib,Python,Python 3.x,Oop,Matplotlib,我有一个类,它从我制定的数学方程中生成数据列表,以模拟一个系统随时间的变化。该类可以对方程中的不同变量采用不同的数字,因此可以从该类创建具有不同模型输出的对象。我想在同一个绘图上绘制不同对象的输出,但当我尝试这样做时,我得到以下错误:ValueError:x和y必须具有相同的第一维度,但具有形状(5,)和(10,)。我正在使用matplotlib绘图。下面是代码的示例: import matplotlib.pyplot as plt class Foo: def __init__(se
ValueError:x和y必须具有相同的第一维度,但具有形状(5,)和(10,)
。我正在使用matplotlib绘图。下面是代码的示例:
import matplotlib.pyplot as plt
class Foo:
def __init__(self, x=[1,2,3,4,5], y=[], var1=None, var2=None):
self.x = x
self.y = y
self.var1 = var1
self.var2 = var2
def calculate_y(self, index):
return (self.var1 + self.var2) * self.x[index]
def run_calculation(self):
for i in range (0, len(self.x)):
self.y.append(self.calculate_y(i))
obj1 = Foo(var1 = 1, var2 = 2)
obj2 = Foo(var1 = 3, var2 = 4)
obj1.run_calculation()
obj2.run_calculation()
plt.figure(1)
plt.plot(obj1.x, obj1.y)
plt.plot(obj2.x, obj2.y)
plt.show()
我正在使用类方法从单个对象生成的列表进行绘图。你知道为什么我会出现这个错误并且无法绘制吗?提前感谢。由于一些模糊的原因,空列表的默认参数使其附加相同的列表(获取解释)。更改此行,使两个实例在单独的列表中工作:
self.y = y.copy()
以下是您的输出:
第二个绘图是
plt.plot(obj1.x,obj2.y)
而不是plt.plot(obj2.x,obj2.y)
鉴于您的代码与您描述的错误不一致,很难提供有意义的见解。MCVE的全部目的是生成相同类型的错误。否则,你要复制什么?对不起,我编辑了我的帖子,这样当你运行代码时,错误是完全相同的。此外,我认为绘制obj2.x而不是obj1.x不会有什么区别,因为它们是相同的值。事实上,当我尝试这一点时,我仍然会遇到同样的错误。仍然在学习Python,但似乎使用obj2.run_calculation()
-theself.y.append
-似乎y
的大小是5,在append之后变成10。似乎是类中的一个问题。出于某种原因,两个实例似乎都附加了相同的列表