【问题标题】:ggvis multiple lines with tooltips带有工具提示的 ggvis 多行
【发布时间】:2015-09-15 10:01:05
【问题描述】:

我正在尝试创建这个情节的交互式版本:

到目前为止,我有以下代码可以创建交互式绘图,但并不是我想要的:

#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 轴显示不正确。

【问题讨论】:

  • 您确定没有layer_points 就无法获得工具提示吗?我从你的代码中删除了layer_points,我仍然得到工具提示。
  • @Pascal 如果您删除 layer_points,您只会在整行中看到一个点。
  • Exaclty,我想省略 layer_points,但我只得到一个工具提示。
  • 那么您的问题是否已更改为仅询问积分?在运行 ggvis 函数之前将日期转换为字符的坏处是需要对网格线和 x 轴标签进行额外修复。
  • 没错,实际上,我将重新表述问题以明确它并没有真正改变。

标签: r ggvis


【解决方案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)

输出:

很抱歉输出不好,但这是我能通过打印屏幕得到的最好结果。

【讨论】:

  • Heureka!不透明度的好主意。让我们看看是否有人知道确定日期的更好方法。到目前为止,这是一个非常有用的解决方法!谢谢
  • 您是否收到错误消息,即中间的值(例如 2 月 8 日)是使用第一个条目中的数据标记的?
  • @David 是的,不幸的是,据我所知,没有解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2020-12-27
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多