r title ggvis

Añadir un título de trama a ggvis



title (3)

Quiero añadir un título a un gráfico de ggvis. No puedo encontrar un ejemplo en ninguna parte. Es fácil de hacer con otros gráficos de R, por ejemplo,

library(ggplot2) library(ggvis) x <- 1:10 y <- x^2 df <- data.frame(x, y) plot(x, y, main = "Plot Title") # Base R with title ggplot(df, aes(x, y)) + geom_point() + ggtitle("Plot Title") # ggplot2 with title df %>% ggvis(~x, ~y) %>% layer_points() # ggvis but no title??

Siento que me falta algo obvio. Cualquier ayuda apreciada.


Actualicé la respuesta de @ tonytonov para no interferir con el eje X predeterminado. Todavía se implementa como un eje, pero implementa su propia escala de ''título'' y combina correctamente las propiedades de título proporcionadas por el usuario, como el tamaño de fuente y el color, con las propiedades predeterminadas necesarias para hacer que el eje sea invisible. Esta versión oculta el eje sin presumir un color de fondo particular. Tres ejemplos siguen la función.

library(ggvis) # ggvis lacks a plot title function, so add one. # based on clever hack by tonytonov # http://.com/a/25030002/1135316 add_title <- function(vis, ..., properties=NULL, title = "Plot Title") { # recursively merge lists by name # http://.com/a/13811666/1135316 merge.lists <- function(a, b) { a.names <- names(a) b.names <- names(b) m.names <- sort(unique(c(a.names, b.names))) sapply(m.names, function(i) { if (is.list(a[[i]]) & is.list(b[[i]])) merge.lists(a[[i]], b[[i]]) else if (i %in% b.names) b[[i]] else a[[i]] }, simplify = FALSE) } # default properties make title ''axis'' invisible default.props <- axis_props( ticks = list(strokeWidth=0), axis = list(strokeWidth=0), labels = list(fontSize = 0), grid = list(strokeWidth=0) ) # merge the default properties with user-supplied props. axis.props <- do.call(axis_props, merge.lists(default.props, properties)) # don''t step on existing scales. vis <- scale_numeric(vis, "title", domain = c(0,1), range = ''width'') axis <- ggvis:::create_axis(''x'', ''title'', orient = "top", title = title, properties = axis.props, ...) ggvis:::append_ggvis(vis, "axes", axis) } # add title with default X axis. iris %>% ggvis(x = ~Petal.Width) %>% layer_points(y = ~Petal.Length, fill = ~Species) %>% add_title(title = "Petal.Width vs. Petal.Length") # Add title with overridden X axis iris %>% ggvis(x = ~Petal.Width) %>% layer_points(y = ~Petal.Length, fill = ~Species) %>% add_axis("x", title = "X-axis!!!!", title_offset=40, properties = axis_props(title=list(fontSize=16), labels = list(fontSize = 12))) %>% add_title(title = "Petal.Width vs. Petal.Length") # Change the font size of the title. iris %>% ggvis(x = ~Petal.Width) %>% layer_points(y = ~Petal.Length, fill = ~Species) %>% add_title(title = "Petal.Width vs. Petal.Length", properties = axis_props(title=list(fontSize=20)))


Además, para cambiar el tamaño de fuente del título, use este código (adaptado de la respuesta de @ tonytonov):

add_title <- function(vis, ..., x_lab = "X units", title = "Plot Title") { add_axis(vis, "x", title = x_lab) %>% add_axis("x", orient = "top", ticks = 0, title = title, properties = axis_props( axis = list(stroke = "white"), title = list(fontSize = 32), labels = list(fontSize = 0) ), ...) }


Bueno, parece que todavía no se ha implementado (o documentado). Estoy bastante seguro de que esto se añadirá pronto. Por ahora, puedes usar un truco sucio así:

df %>% ggvis(~x, ~y) %>% layer_points() %>% add_axis("x", title = "X units") %>% add_axis("x", orient = "top", ticks = 0, title = "Plot Title", properties = axis_props( axis = list(stroke = "white"), labels = list(fontSize = 0)))

Además, si desea utilizar este truco varias veces, puede crear una taquigrafía para ello.

add_title <- function(vis, ..., x_lab = "X units", title = "Plot Title") { add_axis(vis, "x", title = x_lab) %>% add_axis("x", orient = "top", ticks = 0, title = title, properties = axis_props( axis = list(stroke = "white"), labels = list(fontSize = 0) ), ...) } df %>% ggvis(~x, ~y) %>% layer_points() %>% add_title() #same as before df %>% ggvis(~x, ~y) %>% layer_points() %>% add_title(title = "Hello", x_lab = "ton")

Editar:

Ahora puede configurar el título principal y la etiqueta del eje x simultáneamente, corrigiendo la superposición mencionada a continuación.