ggvis несколько строк с всплывающими подсказками

Я пытаюсь создать интерактивную версию этого сюжета: График GGplot

Пока у меня есть следующий код, который создает интерактивный сюжет, но это не совсем то, что я ищу:

#Create Data
library(ggvis)
set.seed(123)
tdat <- data.frame(group = rep(LETTERS[1:2], each = 50),
               time = rep(seq(from = as.Date("2010-01-01"), length.out = 50, by = "day"), 2),
               val = c(cumsum(rnorm(50)) + 100,
                       cumsum(rnorm(50)) + 100))

# ggvis Code
# Function for the tooltip
getData <- function(dat){
    paste(paste("Time:", as.character(dat$time)),
    paste("Group:", as.character(dat$group)),
    paste("Value:", dat$val),
    sep = "<br />")
}

# Visualisation
tdat %>% ggvis(~time, ~val, stroke = ~group) %>% layer_lines(strokeWidth := 1) %>%
     layer_points(size = 1, fill = ~group) %>% add_tooltip(getData)

В результате получается следующий график: GGvis Plot Однако есть некоторые проблемы:

1) Я не хочу иметь точки, только линии. Без layer_points нет всплывающих подсказок...

2) Переменная time является датой, но отображается как целое число. Как исправить некрасивый номер?

Большое спасибо.

Изменить

Поле всплывающей подсказки может быть отформатировано на сегодняшний день, если оно приведено к символу перед вызовом функции ggvis, но это приводит к другим проблемам. Например, ось X отображается неправильно.


person David    schedule 15.09.2015    source источник
comment
Вы уверены, что не можете получать всплывающие подсказки без layer_points? Я удалил layer_points из вашего кода, но всплывающие подсказки по-прежнему появляются.   -  person    schedule 15.09.2015
comment
@Pascal Если вы удалите layer_points, вы увидите только одну точку на всей линии.   -  person LyzandeR    schedule 15.09.2015
comment
Точно, я хотел бы не указывать layer_points, но я получаю только одну всплывающую подсказку.   -  person David    schedule 15.09.2015
comment
Изменился ли ваш вопрос на вопрос только об очках? Плохая сторона преобразования даты в символ перед запуском функции ggvis заключается в том, что требуется дополнительная фиксация для линий сетки и меток оси X.   -  person LyzandeR    schedule 15.09.2015
comment
Правда, на самом деле я переформулирую вопрос, чтобы было понятно, что он особо не изменился.   -  person David    schedule 15.09.2015


Ответы (1)


Я нашел решение для обоих:

#Create Data
library(ggvis)
set.seed(123)
tdat <- data.frame(group = rep(LETTERS[1:2], each = 50),
                   time = rep(seq(from = as.Date("2010-01-01"), length.out = 50, by = "day"), 2),
                   val = c(cumsum(rnorm(50)) + 100,
                           cumsum(rnorm(50)) + 100))

Что касается функции getData, то немного реверс-инжиниринга заставил меня найти решение. Очевидно, если вы разделите числовую дату на 86400000 и добавите происхождение 1970-01-01, все заработает.

# ggvis Code
# Function for the tooltip
getData <- function(dat){

  paste(paste("Time:", as.Date(dat$time/86400000, origin='1970-01-01') ),
        paste("Group:", as.character(dat$group)),
        paste("Value:", dat$val),
        sep = "<br />")
}

Что касается точек, просто установка непрозрачности на ноль заставляет это работать:

# Visualisation
tdat %>% ggvis(~time, ~val, stroke = ~group) %>% layer_lines(strokeWidth := 1) %>%
  layer_points(size = 1, fill = ~group, opacity := 0) %>% add_tooltip(getData)

Выход:

введите здесь описание изображения

Извините за плохой вывод, но это было лучшее, что я мог получить с помощью экрана печати.

person LyzandeR    schedule 15.09.2015
comment
Эврика! Хорошая идея с непрозрачностью. Посмотрим, знает ли кто-нибудь более приятный способ фиксации дат. Пока что очень полезный обходной путь! Спасибо - person David; 15.09.2015
comment
Вы получаете сообщение об ошибке, что значения в середине (например, 8 февраля) помечены с использованием данных из первой записи? - person David; 15.09.2015
comment
@David Да, к сожалению, насколько я знаю, это не исправить. - person LyzandeR; 15.09.2015