Я писал код в виде сценария Python, но я читал и изучал и заметил, что, очевидно, лучше повторно использовать код в виде функций. Итак, мой вопрос:
После размещения сценария для отображения пользовательского изображения, которое я нашел на странице matplotlib внутри функции, график сдвигается вправо и становится немного странным, и буквально единственное, что я сделал было поместить его в блок def function()
и сделать его более чистым. Я покажу вам примеры:
- Изображение в форме сценария:
![Desired image when using script like code](https://i.stack.imgur.com/rMVd6.png)
- Изображение, которое я получаю, когда код находится внутри функции:
![The undesired plot](https://i.stack.imgur.com/dXMW1.png)
Оригинальный код (я новичок в программировании, пожалуйста, не судите меня):
fig = plt.figure(figsize = (20, 10))
w = 2
n = math.ceil((df['ATENUACION_DS'].max() - df['ATENUACION_DS'].min()) / w)
grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2)
x = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 27.0)]['DISTANCIA']
x2 = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 26.0) & (df['ATENUACION_DS'] < 26.9)]['DISTANCIA']
x3 = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 22.0) & (df['ATENUACION_DS'] < 25.9)]['DISTANCIA']
x4 = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 1.0) & (df['ATENUACION_DS'] < 21.9)]['DISTANCIA']
y = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 27.0)]['ATENUACION_DS']
y2 = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 26.0) & (assia_qb_df['ATENUACION_DS'] < 26.9)]['ATENUACION_DS']
y3 = df[(df['DESPLIEGUE']=='Despliegue Y') & (df['ATENUACION_DS'] > 22.0) & (df['ATENUACION_DS'] < 25.9)]['ATENUACION_DS']
y4 = df[(df['DESPLIEGUE']=='Despliegue Yungay') & (df['ATENUACION_DS'] > 1.0) & (df['ATENUACION_DS'] < 21.9)]['ATENUACION_DS']
main_ax = fig.add_subplot(grid[:-1,1:])
main_ax.scatter(x, y, alpha=0.5, color='red', label='Mal')
main_ax.scatter(x2, y2, alpha=0.5, color='orange', label='Medio')
main_ax.scatter(x3, y3, alpha=0.5, color='green', label='Optimo')
main_ax.scatter(x4, y4, alpha=0.5, color='yellow', label='Medio')
plt.xlabel('Distancia', fontsize=20)
main_ax.tick_params(labelsize=20)
plt.title('Atenuacion vs Distancia, con Histograma de Atenuacion (Despliegue Y)', fontsize=20)
y_hist = fig.add_subplot(grid[:-1,0], sharey=main_ax)
y_hist.tick_params(labelsize=10)
y_hist.invert_xaxis()
y_hist.hist(y, bins=n, orientation='horizontal', color='red')
y_hist.hist(y2, bins=n, orientation='horizontal', color='orange')
y_hist.hist(y3, bins=n, orientation='horizontal', color='green')
y_hist.hist(y4, bins=n, orientation='horizontal', color='yellow')
plt.show()
Код внутри функции :
def scatter_hist(df, despliegue):
# una funcion para crear un grafico compuesto de scatter de potencia y un histograma. Recibe
# un DataFrame y debe tiene un filtro de fecha, y varios filtros de colores para los rangos
# de potencia
# PARAMETROS DE ENTRADA
df = df
despliegue = despliegue
# RANGOS
rango_normal = [0.0, 22.0]
rango_optimo = [22.0, 25.9]
rango_critico = [26.0, 27.0]
rango_fuera = [27.0, 40.0]
# COLORES
color_normal = 'yellow'
color_optimo = 'green'
color_critico = 'orange'
color_fuera = 'red'
rangos = [rango_normal, rango_optimo, rango_critico, rango_fuera]
colores = [color_normal, color_optimo, color_critico, color_fuera]
# TAMAÑO FIGURA
fig = plt.figure(figsize = (20, 10))
grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2)
# PARAMETROS FIGURA
w = 2
n = math.ceil((df['ATENUACION_DS'].max() - df['ATENUACION_DS'].min()) / w)
# Xs PARA LOS RANGOS
equises = []
for rango in rangos:
x = df[(df['DESPLIEGUE']== despliegue) & (df['ATENUACION_DS'] > rango[0]) & (df['ATENUACION_DS'] < rango[1])]['DISTANCIA']
equises.append(x)
# Ys PARA LOS RANGOS
yeses = []
for rango in rangos:
y = df[(df['DESPLIEGUE']== despliegue) & (df['ATENUACION_DS'] > rango[0]) & (df['ATENUACION_DS'] < rango[1])]['ATENUACION_DS']
yeses.append(y)
# CREACION DE LA FIGURA
# SCATTER
main_ax = fig.add_subplot(grid[:-1,1:])
main_ax.tick_params(labelsize=20)
y_hist = fig.add_subplot(grid[:-1,0], sharey=main_ax)
y_hist.tick_params(labelsize=10)
y_hist.invert_xaxis()
plt.title('Atenuacion vs Distancia, con Histograma de Atenuacion ({} - {})'.format(despliegue, df[df['DESPLIEGUE']==despliegue]['EMPRESA_COLABORADORA']), fontsize=20)
plt.xlabel('Distancia', fontsize=20)
for (x, y, color) in zip(equises, yeses, colores):
main_ax.scatter(x, y, alpha=0.5, color= color)
# HISTOGRAMA
for (y, color) in zip(yeses, colores):
y_hist.hist(y, bins=n, orientation='horizontal', color=color)
plt.show()