2015-09-15 2 views
2

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

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

#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) Переменная время - это дата, но отображается как целое число. Как я могу исправить уродливое число?

спасибо.

Редактировать

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

+1

Вы не можете получить подсказки без 'layer_points'? Я удалил «layer_points» из вашего кода, и я все равно получаю всплывающие подсказки. –

+0

@Pascal. Если вы удалите «layer_points», вы увидите только одну точку на всей линии. – LyzandeR

+0

Exaclty, я хотел бы оставить layer_points, но я получаю только одну подсказку. – David

ответ

3

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

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

Ouput:

enter image description here

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

+0

Heureka! Хорошая идея с непрозрачностью. Посмотрим, знает ли кто-нибудь более удобный способ установления дат. Пока что очень полезный обходной путь! Спасибо – David

+0

Добро пожаловать :). Рад, что смог помочь! – LyzandeR

+0

Получаете ли вы ошибку, что значения в середине (например, 8 февраля) помечены с использованием данных из первой записи? – David

Смежные вопросы