Как построить атрибуты экземпляра из нескольких объектов на одном графике в Python 3 - PullRequest
2 голосов
/ 03 марта 2020

У меня есть класс, который генерирует списки данных из математических уравнений, которые я сформулировал для моделирования системы с течением времени. Класс может принимать разные числа для разных переменных в уравнениях, поэтому вы можете создавать объекты из класса, которые имеют разные выходные данные модели. Я хотел бы вывести выходные данные из разных объектов на одном графике, но когда я пытаюсь это сделать, я получаю следующую ошибку: ValueError: x and y must have same first dimension, but have shapes (5,) and (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()

Я использую списки, сгенерированные методами класса из отдельных объектов для построения. Любая идея, почему я получаю эту ошибку и не могу построить? Заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

Ваш аргумент по умолчанию для пустого списка, по какой-то непонятной причине, делает его таким, чтобы к нему добавлялся тот же список (получите объяснение здесь ). Измените эту строку, чтобы оба экземпляра работали в отдельных списках:

self.y = y.copy()

Вот ваш вывод: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...