superponer - ¿Cómo cambio condicionalmente la relación de aspecto de los gráficos en el paquete brillante de R?
superponer graficas en r ggplot (1)
Simplemente jugando con Shiny y amándolo ya. Pero, ¿cómo puedo obtener gráficos en la combinación reactivePlot / plotOutput para que sean de diferentes tamaños, dependiendo de qué gráfico se grafica?
En este primer ejemplo, he seleccionado el análisis de "Curva de rendimiento" y obtengo la relación de aspecto que deseo:
Pero cuando elijo otro análisis, en este caso un mapa de calor, ahora tiene el mismo tamaño que el gráfico "Curva de rendimiento" que lo distorsiona (las celdas deben ser cuadradas, no rectangulares).
¿Cómo puedo cambiar el tamaño del gráfico dependiendo de qué tabla se ha seleccionado? Intenté poner el parámetro height = NA, NULL o "", pero no me gusta ninguno.
Por separado, pero en la misma aplicación, ¿cómo puedo obtener algunos espacios en blanco entre la entrada de selección superior y las entradas de texto en el panel lateral de la barra? He intentado h4 ("") pero no funciona.
Aquí está mi ui.R:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel(h1("SAGB Relative Value Tool")),
sidebarPanel(
h4("Choose analysis:"),
selectInput("analysis1", "",
choices = c("Yield curve", "Optical asset swap spreads",
"Cheap dear box", "Cheap dear charts", "Switch signaliser",
"Barbells")),
h4(" "),
h4("Yield override:"),
lapply(bondNames, function(x)
textInput(paste(x, "bond"), x, last(sagb$sagb)[x]))
),
mainPanel(
h3(textOutput("AnalysisHeader")),
plotOutput("AnalysisOutput", height = "10in"))
))
y aquí está mi servidor.
library(shiny)
shinyServer(function(input, output) {
output$AnalysisHeader <- reactiveText(function() {
input$analysis1
})
output$AnalysisOutput <- reactivePlot(function() {
switch(input$analysis1,
"Yield curve" = wo(whichOut = 1),
"Optical asset swap spreads" = wo(whichOut = 2),
"Cheap dear box" = wo(whichOut = 3),
"Cheap dear charts" = wo(whichOut = 4),
"Switch signaliser" = wo(whichOut = 5),
"Barbells" = wo(whichOut = 6)
)
})
})
(a veces es una buena idea RTFM (hablar conmigo mismo, cf mi comentario a OP)
reactivePlot(func, width = "auto", height = "auto", ...)
width The width of the rendered plot, in pixels; or ’auto’ to use the offsetWidth of
the HTML element that is bound to this plot. You can also pass in a function
that returns the width in pixels or ’auto’; in the body of the function you may
reference reactive values and functions.
*height* The height of the rendered plot, in pixels; or ’auto’ to use the offsetHeight
of the HTML element that is bound to this plot. You can also pass in a function
that returns the width in pixels or ’auto’; in the body of the function you may
reference reactive values and functions.
... Arguments to be passed through to png. These can be used to set the width,
height, background color, etc.
sin embargo, hasta ahora no he podido hacer que trabaje (con height="15in"
) ...
Error in switch(units, `in` = res, cm = res/2.54, mm = res/25.4, px = 1) * :
non-numeric argument to binary operator
EDITAR : ahora está funcionando, la height
tiene que ser numérica, con units="px"
opcionales units="px"
y res
ciertamente algo para convertir units
en píxeles.
EDIT 2 : y no te olvides de actualizar Shiny [a la última versión], soluciona algunos errores que enfrenté.
EDIT 3 : aquí hay un ejemplo donde la altura se cambia dinámicamente:
getVarHeight <- function() {
return(getNumberOfPlots() * 400)
}
output$out <- reactivePlot(doPlots, height=getVarHeight)
Puede relacionar el fragmento de getNumberOfPlots
con esta captura de pantalla , donde getNumberOfPlots
devuelve el número de gráfico a trazar.
EDIT 4 : si desea visualizar varias imágenes, también debe cambiar la height
en ''ui.R'': este valor se transmite directamente a CSS, y el valor predeterminado es 400px
. Entonces, si tus imágenes son más grandes, se superpondrán y solo estarán visibles 400px ...
plotOutput(outputId = "plot_rain", height="100%"))