Search code examples
rtitleggvis

Add a plot title to ggvis


I want to add a title to a ggvis plot. I can't find an example anywhere. It's simple to do with other R plots, e.g.

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??

Feel like I'm missing something obvious. Any help appreciated.


Solution

  • Well, seems like it has not been implemented (or documented?) yet. I'm pretty sure this will be added soon. For now, you can use a dirty hack like so:

    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)))
    

    Furthermore, if you would like to use this hack multiple times, you can create a shorthand for it.

    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")
    

    Edit:

    Now you can set both the main title and the x axis label simultaneously, fixing the overlap mentioned below.