Возвращение matplotlib фига с __repr__ или подобным - PullRequest
1 голос
/ 27 января 2020

Я строю класс Python, который используется для построения диаграммы matplotlib. Я решил использовать класс, потому что я хочу иметь возможность строить диаграмму в несколько этапов, а не иметь одну функцию, которая принимает большое количество аргументов.

Моя основная рабочая среда - Jupyter У нас с лабораторией вообще отключены интерактивные черчения, т. Е. plt.ioff(). Вместо этого я предпочитаю использовать display() или неявно отображать фигуру, помещая ее в последнюю строку ячейки.

class Example:

    def __init__(self):

        self.fig, self.ax = plt.subplots()

Используя приведенный выше пример, я знаю, что могу сделать что-то подобное

display(Example().fig)

Но я надеялся, что есть способ сделать .fig неявным, чтобы я мог просто display(Example()). Первоначально я думал, что я мог бы сделать

def __repr__():
    return self.fig

Но этот подход, кажется, не работает. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Я думаю, что вы хотите показать png представление фигуры, поэтому

class Example:

    def __init__(self):
        self.fig, self.ax = plt.subplots()

    def _repr_png_(self):
        return display(self.fig)

enter image description here

0 голосов
/ 28 января 2020

Может быть, вы можете использовать eval. Вот что-то, что печатает «подзаговоры» и возвращает нулевые значения перемешивания.

class Example:
    def __init__(self):
        pass

    def __repr__(self):
        eval(self.__to_eval())
        return '0'

    def __to_eval(self):
        return "print('subplots')"

Пример:

In [0]: Example()
subplots
Out[20]: 0
...