Python: как использовать классы для построения разных линий? - PullRequest
0 голосов
/ 18 октября 2018

Я хочу построить разные линии, используя метод класса.Для того, чтобы построить линию.Аналогично Передача графиков из класса Я использую этот класс для построения линии

from matplotlib.figure import Figure
import matplotlib.pyplot as plt

class Plotter(object):
    def __init__(self, xval=None, yval=None, dim1=None, dim2=None):
        self.xval = xval
        self.yval = yval
        self.dim1 = dim1
        self.dim2 = dim2

    def plotthing(self):
        fig, ax = plt.subplots(figsize=(self.dim1,self.dim2))
        ax.plot(self.xval, self.yval, 'o-')
        return fig

app = Plotter(xval=range(0,10), yval=range(0,10),  dim1=5, dim2=5)
plot = app.plotthing()

enter image description here

Однако я бы хотелпостроить различные кривые на одном графике и определить для этого функцию внутри класса.

Xval = []
Yval = []
xval=range(0,10)
yval=range(0,10)
Xval.append(xval)
Yval.append(yval)
xval=range(0,10)
yval=np.sin(range(0,10))
Xval.append(xval)
Yval.append(yval)

Как определить функцию для передачи на plotthing?

class Plotter(object):
    def __init__(self, xval=None, yval=None, dim1=None, dim2=None):
        self.xval = xval
        self.yval = yval
        self.dim1 = dim1
        self.dim2 = dim2

    def function_do_plot(x, y):
        do something  

    def plotthing(self):
        fig, ax = plt.subplots(figsize=(self.dim1,self.dim2))
        for i in range(0, len(self.xval)): 
             x = xval[i]
             y = yval[i]
             fig = function_do_plot(x, y)
        return fig

1 Ответ

0 голосов
/ 18 октября 2018

Рассмотрите возможность циклического просмотра списков входов без отдельного метода:

class Plotter(object):
    def __init__(self, xval=None, yval=None, dim1=None, dim2=None):
        self.xval = xval    # LIST
        self.yval = yval    # LIST 
        self.dim1 = dim1
        self.dim2 = dim2

    def plotthing(self):
        fig, ax = plt.subplots(figsize=(self.dim1,self.dim2))

        for i, j in zip(self.xval, self.yval):
            ax.plot(i, j, 'o-')

        return fig

# POPULATE LIST OF RANGES
Xval = []; Yval = []

xval = range(0,10)
yval = range(0,10)
Xval.append(xval)
Yval.append(yval)

xval = range(0,10)
yval = np.sin(range(0,10))
Xval.append(xval)
Yval.append(yval)

# PASS IN LIST OF RANGES
app = Plotter(xval=Xval, yval=Yval, dim1=5, dim2=5)
plot = app.plotthing()

Plot Output

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