Сдвиг изображения Matplotlib вправо - PullRequest
0 голосов
/ 01 апреля 2020

Я писал код в виде сценария Python, но я читал и изучал и заметил, что, очевидно, лучше повторно использовать код в виде функций. Итак, мой вопрос:

После размещения сценария для отображения пользовательского изображения, которое я нашел на странице matplotlib внутри функции, график сдвигается вправо и становится немного странным, и буквально единственное, что я сделал было поместить его в блок def function() и сделать его более чистым. Я покажу вам примеры:

  • Изображение в форме сценария: Desired image when using script like code
  • Изображение, которое я получаю, когда код находится внутри функции: The undesired plot

Оригинальный код (я новичок в программировании, пожалуйста, не судите меня):

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...