def AR_plot(aspect_ratio, size,auto_bins = True, bins = 10, geometric = False, min_max = None, manual_lims = False, x_lims = None, y_lims = None, ax = None):
"""_summary_
Args:
aspect_ratio (_type_): _description_
size (_type_): _description_
auto_bins (bool, optional): _description_. Defaults to True.
bins (int, optional): _description_. Defaults to 10.
geometric (bool, optional): _description_. Defaults to False.
min_max (_type_, optional): _description_. Defaults to None.
manual_lims (bool, optional): _description_. Defaults to False.
x_lims (_type_, optional): _description_. Defaults to None.
y_lims (_type_, optional): _description_. Defaults to None.
Returns:
_type_: _description_
"""
#if auto_bins is false, bins should be a set of bins, otherwise just an integer; geometric used to define how bins are generated in automatic
#manual_lims allows user to define x and y limits themselves, otherwise will be done automatically by matplotlib
if min_max is None:
max_val = np.max(size)
min_val = np.min(size)
else:
max_val = min_max[1]
min_val = min_max[0]
if auto_bins == True:
#generate bins
if geometric == True:
#generate them geometrically
b = np.logspace(min_val, max_val, num = bins)
else:
#generate linear bins
b = np.linspace(min_val, max_val, num = bins)
else:
b = bins
aspect_ratio_binned, aspect_ratio_sigma, bin_centres = gen_aspect_ratio_data(size, aspect_ratio, b)
if ax is not None:
ax.scatter(bin_centres, aspect_ratio_binned)
ax.errorbar(bin_centres, aspect_ratio_binned, yerr=aspect_ratio_sigma, fmt = 'o')
return None
else:
fig, ax = plt.subplots(1,1,figsize = (8,8))
ax.scatter(bin_centres, aspect_ratio_binned)
ax.errorbar(bin_centres, aspect_ratio_binned, yerr=aspect_ratio_sigma, fmt = 'o')
return fig, ax