ggvis 多行工具提示
ggvis multiple lines with tooltips
我正在尝试创建此情节的交互式版本:
到目前为止,我有以下创建交互式绘图的代码,但并不是我要找的代码:
#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)
结果如下图:
但是存在一些问题:
1) 我不要点,只要线。没有 layer_points,就没有工具提示...
2) 变量时间是一个日期,但显示为一个整数。我该如何解决丑陋的数字?
非常感谢。
编辑
如果在调用 ggvis 函数之前将工具提示字段强制转换为字符,则可以将其格式化为最新格式,但它会引入其他问题。例如,x 轴显示不正确。
我找到了两个解决方案:
#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)
输出:
抱歉输出不好,但这是我能通过打印屏幕得到的最好结果。
我正在尝试创建此情节的交互式版本:
到目前为止,我有以下创建交互式绘图的代码,但并不是我要找的代码:
#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)
结果如下图:
1) 我不要点,只要线。没有 layer_points,就没有工具提示...
2) 变量时间是一个日期,但显示为一个整数。我该如何解决丑陋的数字?
非常感谢。
编辑
如果在调用 ggvis 函数之前将工具提示字段强制转换为字符,则可以将其格式化为最新格式,但它会引入其他问题。例如,x 轴显示不正确。
我找到了两个解决方案:
#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)
输出:
抱歉输出不好,但这是我能通过打印屏幕得到的最好结果。