Нарисуйте линию с пересечением и наклоном в ggvis

Только начинаю с Shiny. Я спрашиваю вас: можно ли добавить отдельные линии, характеризуемые пересечением и наклоном, на график ggvis?

Например, с ggplot2, использующим geom_abline.

Код, который мне интересно обсудить, находится в файле server.R, расположенном по адресу https://github.com/wch/movies и ссылается на этот пример http://shiny.rstudio.com/gallery/movie-explorer.html.

Это способ провести линию

x_min <- 0
x_max <- 10

m <- 1
b <- 5

x <- c(x_min, x_max)
y <- m*x + b

df <- data.frame(x = x, y = y)

df %>% ggvis(x = ~x, y = ~y) %>% layer_lines()

но мне интересно нарисовать его НАД существующим сюжетом ggvis, ссылка на который приведена выше.

Я должен добавить код здесь:

movies %>%
      ggvis(x = xvar, y = yvar) %>%
      layer_points(size := 50, size.hover := 200,
        fillOpacity := 0.2, fillOpacity.hover := 0.5,
        stroke = ~has_oscar, key := ~ID) %>%
      add_tooltip(movie_tooltip, "hover") %>%
      add_axis("x", title = xvar_name) %>%
      add_axis("y", title = yvar_name) %>%
      add_legend("stroke", title = "Won Oscar", values = c("Yes", "No")) %>%
      scale_nominal("stroke", domain = c("Yes", "No"),
        range = c("orange", "#aaa")) %>%
      set_options(width = 500, height = 500)
  })

person Davi    schedule 05.07.2014    source источник


Ответы (2)


Я нашел решение, я благодарю дорогого друга за это:

data_line <- data.frame(
  x_rng = c(0, 100), 
  y_rng = c(80, 200)
)     

movies %>%
  ggvis(x = xvar, y = yvar) %>%
  layer_points(size := 50, size.hover := 200,
    fillOpacity := 0.2, fillOpacity.hover := 0.5,
    stroke = ~has_oscar, key := ~ID) %>%
  ### A couple of ways to display lines
  layer_model_predictions(model = "lm", stroke := "red") %>%
  layer_paths(x = ~x_rng, y = ~y_rng, stroke := "blue", data = data_line) %>%
  ###
  add_tooltip(movie_tooltip, "hover") %>%
  add_axis("x", title = xvar_name) %>%
  add_axis("y", title = yvar_name) %>%
  add_legend("stroke", title = "Won Oscar", values = c("Yes", "No")) %>%
  scale_nominal("stroke", domain = c("Yes", "No"),
    range = c("orange", "#aaa")) %>%
  set_options(width = 500, height = 500)

Координаты относятся к обычному примеру http://shiny.rstudio.com/gallery/movie-explorer.html.

person Davi    schedule 08.07.2014

Меня интересует решение, которое анализирует vis для получения домена.

Вот что я придумал (что также не делает этого):

abline_data <- function (domain, intercept, slope) {
  data.frame(x = domain, y = domain * slope + intercept)
}

untick <- function (x) {
  # Hack to remove backticks from names
  stopifnot(all(sapply(x, is.name)))
  str_replace_all(as.character(x), "`", "")
}

layer_abline <- function (.vis, domain, intercept = 0, slope = 1) {
  df <- abline_data(domain, intercept, slope)
  names(df) <- with(.vis$cur_props, untick(c(x.update$value, y.update$value)))
  layer_paths(.vis, data = df)
}

cars %>% ggvis(x = ~speed, y = ~dist) %>% 
  layer_points() %>% 
  layer_abline(domain = c(0, 26))
person dholstius    schedule 24.09.2014