У меня есть много функций разброса, которые можно построить с помощью matplotlib, либо по одной оси y, либо по двум осям y. Чтобы облегчить это, я создаю свою собственную функцию разброса: draw_scatter. Я указываю в аргументе, по какой оси Y я хочу построить данные.
Я также указываю fig_param, который указывает fig, ax1, ax2, а функция возвращает кортеж (fig, ax1, ax2), чтобы использовать те же элементы для следующего набора данных.
Мне не нравится иметь в аргументах ax1, ax2, но я не нахожу, как этого избежать. Есть ли встроенная функция, выдающая ax1 и ax2, если есть? Я мог бы назвать это в моей функции
У меня будет функция для указания x_label, легенды ... на рис.
Спасибо
import numpy as np
import matplotlib.pyplot as plt
def draw_scatter(fig_param, ax_selec, X, Y, **kwargs):
"""Draw a figure, scatter type, on one or two axis, with selection in argument
Input: fig_param(fig,ax1,ax2), ax2 is None if only one axis wanted,
simple array X, simple array Y, parameters dict
Output: (fig,ax1,ax2), in order to be used again for next elements to be drawn on the same figure"""
fig, ax1, ax2 = fig_param
if kwargs.get('marker_color'):
marker_color = kwargs['marker_color']
else:
marker_color='k'
if kwargs.get('marker_size'):
marker_size = kwargs['marker_size']
else:
marker_size = 4
if ax_selec == 1:
ax1.scatter(X, Y, color=marker_color, s=marker_size)
else:
ax2.scatter(X, Y, color=marker_color, s=marker_size)
return (fig, ax1, ax2)
x = np.arange(0, 10.0, 1)
y1 = 2*x
y2 = np.sin(x)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx() # -Set to None if only one y axis is needed
param = {'marker_color':'blue',
'marker_size' : 20}
result_fig = draw_scatter((fig,ax1,ax2), 1, x, y1,**param)
param = {'marker_color':'red'}
result_fig = draw_scatter(result_fig, 2, x, y2, **param)