如何在Dygraphs中缩放点?

Jim*_*mbo 7 javascript r dygraphs

我正在使用R的伟大dygraphs包(https://rstudio.github.io/dygraphs/)

我现在的代码是:

james<-mtcars[c("mpg","drat")]
james$date<-seq(from=as.Date("2013-05-16"),to=as.Date("2013-06-16"),by="days")
x <- xts::xts(james$mpg, order.by = james$date)
p <- dygraphs::dygraph(x, main = "mpg over time", xlab = "Date", ylab = "mpg") %>%
     dygraphs::dyRangeSelector() %>% 
     dyOptions(drawPoints = TRUE, pointSize = 2)
p
Run Code Online (Sandbox Code Playgroud)

我想缩放p中的点大小james$drat,而不是将其固定为2.

我怎样才能做到这一点?

Dag*_*ann 1

我认为 dygraphs javascript 库没有在每个系列中改变点大小的选项。一个非常简单的解决方法是为每个磅值创建一个系列。
假设我们想要 5 种不同的点大小,随 变化james$drat。首先,我们根据 的值创建一个值为 1-5 的分箱变量drat

drat_binned <- cut(james$drat, breaks=5, labels=1:5)
Run Code Online (Sandbox Code Playgroud)

然后我们创建绘图 y 变量 ( james$mpg) 的 5 个副本:

james_new_variables <- matrix(rep(james$mpg, 5), nrow=nrow(james))
Run Code Online (Sandbox Code Playgroud)

对于第 1 列,我们仅保留等于 1 的mpgdrat_binned,相应地,对于第 2-5 列。然后将变量添加到原始数据集中:

for (i in 1:5)
  james_new_variables[drat_binned != i, i] <- NA
james <- data.frame(james, james_new_variables)
Run Code Online (Sandbox Code Playgroud)

然后我们创建一个新dygraph的原始变量加上新变量(默认名为X1-X5):

x <- xts::xts(james[,c("mpg","X1","X2","X3","X4","X5")], order.by = james$date)
p <- dygraphs::dygraph(x, main = "mpg over time", xlab = "Date", ylab = "mpg") %>%
  dygraphs::dyRangeSelector() %>% 
  dySeries("mpg") %>%
  dySeries("X1", color="blue", drawPoints = TRUE, pointSize = 2) %>%
  dySeries("X2", color="blue", drawPoints = TRUE, pointSize = 3) %>%
  dySeries("X3", color="blue", drawPoints = TRUE, pointSize = 4) %>%
  dySeries("X4", color="blue", drawPoints = TRUE, pointSize = 5) %>%
  dySeries("X5", color="blue", drawPoints = TRUE, pointSize = 6) %>%
p
Run Code Online (Sandbox Code Playgroud)

不是很优雅,但还算可以。唯一揭示所用技巧的是图例,它与 X1-X5 标签搞乱了。