Всего два предложения:
Используйте переменную для хранения ax[x_plot][y_plot]
, поэтому вам не нужно повторять это каждый раз. e.g.::
a = ax[x_plot][y_plot] = plt.subplot2grid((3, 3), (x_plot, y_plot), colspan = column_span)
a.plot(...)
#etc.
Вместо x_axis_1
и т. Д. Создайте структуру для хранения данных графика и передайте ее в виде списка:
from collections import namedtuple
PlotData = namedtuple('PlotData', 'x_axis y_axis label color')
# ...
plotdata_list = [Plotdata(x1, y1, label1, color21), ...]
get_plot(x_axis, y_axis, column_span, title, plotdata_list)
... и используйте цикл для построения графиков.
Код (не проверено):
def get_plot(x_plot, y_plot, column_span, title, plotdata_list):
a = ax[x_plot][y_plot] = plt.subplot2grid((3, 3), (x_plot, y_plot), colspan = column_span)
for data in plotdata_list:
kwargs = {}
if data.label:
kwargs['label'] = data.label
a.plot(data.x_axis, data.y_axis, linewidth=2, color=data.color, marker='o', **kwargs)
if len(plotdata_list) > 1:
if title == ' sterillite' or title == 'Fennel seeds':
a.set_ylim(0, 100)
a.legend()
a.set_xlim(xmin = 0.0)
a.yaxis.set_tick_params(labelsize = 8)
a.xaxis.set_tick_params(labelsize = 8)
a.set_axisbelow(True)
a.yaxis.grid(True)
a.xaxis.grid(False)
a.yaxis.set_major_formatter(FuncFormatter(format_y_tick_suffix))
a.set_title(title, fontsize = 10, fontweight = "bold")
Позвоните так (после вашего комментария):
get_plot(0, 0, column_span=2, title='hp_accessories',
plotdata_list=[
# arguments: x, y, label, color
PlotData(hp_laser_ts, hp_laser, 'Lasers', [0.37, 0.23, 0.37]),
PlotData(hp_keyboard_ts, hp_keyboard, 'Keyboards', [0.44, 0.64, 0.69]),
PlotData(hp_mouse_ts, hp_mouse, 'Mice', [0.68, 0.64, 0.22]),
]
)