У меня есть класс, который имеет много функций построения графика. Мое намерение состоит в том, чтобы сгруппировать все графики в одном изображении с помощью метода subplot matplotlib, в зависимости от того, сколько функций я вызываю.увеличить счетчик каждый раз, когда я вызываю функцию внутри класса
Я пробовал что-то вроде следующего (это короткая версия моей программы), но я не знаю, почему это не работает.
Любая помощь приветствуется. Заранее спасибо.
import itertools
import numpy as np
from matplotlib import pyplot as plt
class Base(object):
def __init__(self, a, multiPlot=True, numColGraph=None, numRowGraph=None,
figSize=None, DPI=None, num=None):
self.a = a
self.x = np.linspace(0, 5)
if multiPlot:
self.nCG = numColGraph
self.nRG = numRowGraph
else:
self.nCG = 1
self.nRG = 1
if figSize and DPI:
self.thePlot = plt.figure(figsize=figSize, dpi=DPI)
if num == 0:
self.plotId = itertools.count(1)
def createPlot1(self):
y = self.x**(a/2)
self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId))
plt.plot(self.x, y, label=str(self.a)+'/2')
def createPlot2(self):
y = self.x**a
self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId))
plt.plot(self.x, y, label=self.a)
def createPlot3(self):
y = self.x**(2*a)
self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId))
plt.plot(self.x, y, label=str(self.a)+'*2')
if __name__ == "__main__":
A = np.linspace(0, 2, 5)
for i, a in enumerate(A):
Instance = Base(a, numColGraph=3, numRowGraph=len(A),
figSize=(12,10), DPI=100, num=i)
Instance.createPlot1()
Instance.createPlot2()
Instance.createPlot3()
plt.show()
Когда вы говорите: «Это не работает», можете ли вы быть более конкретным о том, что вы ожидаете работать, а что вместо этого происходит? – SethMMorton
Ну, для начала я получаю следующее сообщение об ошибке: «Базовый» объект не имеет атрибута «plotId», но я его уменьшил. Я хочу получить, после цикла, три графика на том же рисунке (график, о, как вы его называете). У меня возникает проблема с увеличением переменной plotId при каждом вызове функции. Извините, если я не сделаю свое ясное, английский не мой родной язык. – ezitoc
Я подозреваю, что вы неправильно используете переменную 'plotId'. Он получает только 'if num == 0', но вы создаете объекты' Base' с 0 раз (из перечисления), а не снова. – bbayles