es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible restringir el eje de plot_ly a ciertas proporciones del trazado?

Estoy graficando dos tipos diferentes de datos en R en el mismo eje x con la biblioteca plot_ly. Tengo dos ejes y independientes. Los datos aquí son un ejemplo rápido para representar el conjunto de datos con el que estoy trabajando. Tengo una familia de variables explicativas (es decir, los valores reales del 1 al 10), sus coeficientes y la cantidad normalizada de veces que aparecieron en un modelo ficticio, y valores NA para rellenar los vectores con el fin de crear marcos de datos:

require (tidyverse)
require (data.table)
require (stringr)
require (plotly)
require (processx)

Actuals <- c (1,2,3,4,5,6,7,8,9,10)
set.seed (10)
UniqCoef1 <- runif (10, min = -1, max = 1)
NrmPolct1 <- c (.015, .005, .33, .32, .225, .025, .03, .05, NA, NA)
dataframe1 <- data.frame (NrmPolct1, UniqCoef1, Actuals)

En un esfuerzo por fijar los rangos de sus respectivos ejes y y2, construí factores de escala basados en el valor máximo de los coeficientes:

sclfctr1 <- ((.33*1.02)/.20)

Luego grafiqué los datos:

plot1 <- plot_ly (dataframe1)%>%
            add_trace (x = ~ Actuals, y = ~ UniqCoef1, type = " scatter & amp; quot ;, modo = & amp; quot; marcadores & amp; quot ;, nombre = & amp; quot; Coeficiente valores & amp; quot;) %>%
            add_bars (x = ~ Actuals, y = ~ NrmPolct1, yaxis = & amp; quot; y2 & amp; quot ;, nombre = & amp; quot;% Polcy Count & amp; quot;) %>%
            diseño (plot_bgcolor = & amp; # 39; # D0CFC9 & amp; # 39 ;,
                    yaxis = list (scaleanchor = & amp; quot; x & amp; quot;, scaleratio = 5, título = & amp; quot; Coeficientes & amp; quot ;, zeroline = FALSE,
                                rango = c ((((max (UniqCoef1) * 1.02) - (max (UniqCoef1) * 1.02) + (min (UniqCoef1) * .98)) / .80), max (UniqCoef1) * 1.02),
                                tickvals = UniqCoef1, standoff = 30),
                    yaxis2 = lista (scaleacnchor = & amp; quot; y & amp; quot;, scaleratio =. 15, superpuesta = & amp; quot; y & amp; quot ;, lado = & amp; quot; derecho & amp; quot ;, tickvals = NrmPolct1, rango = c (0, sclfctr1), title = & amp; quot;% Polcy Count & amp; quot ;, standoff = 30),
                    xaxis = lista (tickvals = Actuals, título = pegar (& amp; quot; valores reales & amp; quot;), showgrid = T, standoff = 30),
                    título = pegar0 (& amp; quot; # Actuals para el estado 23, cultivo 41. & amp; quot;))

La método que estoy utilizando funciona generalmente para evitar que el diagrama de dispersión se oculte detrás de las barras, pero espero encontrar una manera de restringir y1 para que utilice solo el 80% superior aproximadamente del área del gráfico y y2 el 20% inferior aproximadamente.

¿Es esto posible con plot_ly en R? Hasta ahora, ni mi utilización de scaleanchor y scaleratio ni los argumentos range() en la sección de diseño han sido efectivos.

Actualización: Jugué con el argumento base en la sección add_bars() con los mismos resultados.

Actualización: tampoco hay suerte con el dominio. Es posible que no esté usando correctamente las herramientas de la biblioteca, pero no estoy seguro de qué más probar.

Actualización 02/12/21: Probando nuevos cálculos de rango. Podría haber encontrado un enfoque chapucero.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el código proporcionado, parece que ya ha intentado utilizar los argumentos “scaleanchor” y “scaleratio” para escalar los ejes y, sin embargo, no ha logrado el resultado deseado. Una alternativa a considerar es ajustar los argumentos “range” en las secciones “yaxis” y “yaxis2” del “layout”.

    Una posible solución es establecer la escala del eje “yaxis” como una fracción (por ejemplo, 0,8) del valor máximo del coeficiente, y la escala del eje “yaxis2” para cubrir la parte restante. Aquí hay un ejemplo de cómo implementar esto:

    max_coef_value <- max(UniqCoef1)
    
    plot1 <- plot_ly(dataframe1) %>%
      add_trace(x=~Actuals, y=~UniqCoef1, type="scatter", mode="markers", name="Valores del coeficiente") %>%
      add_bars(x=~Actuals, y=~NrmPolct1, yaxis="y2", name="% de la cuenta de Polcy") %>%
      layout(plot_bgcolor='#D0CFC9',
             yaxis=list(scaleanchor="x", scaleratio=5, title="Coeficientes", zeroline = FALSE,
                        range=c(max_coef_value*0.2, max_coef_value*0.8), tickvals=UniqCoef1, standoff=30),
             yaxis2=list(scaleacnchor="y", scaleratio=0.15, overlaying="y", side="right", 
                         tickvals=NrmPolct1, range=c(0, max_coef_value*0.2), title="% de la cuenta de Polcy",
                         standoff=30),
             xaxis=list(tickvals=Actuals, title=paste("actuals"), showgrid=T, standoff=30),
             title=paste0("# Actuals para el Estado 23, Cultivo 41."))
    

    En este ejemplo, el argumento “range” del “yaxis” se establece en el 80% del valor máximo del coeficiente, y el argumento “range” del “yaxis2” se establece para cubrir el 20% restante. Puede ser necesario ajustar las fracciones específicas y los valores de los ticks para adaptarse a sus necesidades específicas de visualización, pero este enfoque debería permitirle controlar el tamaño relativo de los dos ejes “y” con mayor precisión.

Comments are closed.