Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3中在同一绘图上绘制多个对象的实例属性_Python_Python 3.x_Oop_Matplotlib - Fatal编程技术网

如何在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()
-the
self.y.append
-似乎
y
的大小是5,在append之后变成10。似乎是类中的一个问题。出于某种原因,两个实例似乎都附加了相同的列表