Javascript 如何在动态图中缩放点?

Javascript 如何在动态图中缩放点?,javascript,r,dygraphs,Javascript,R,Dygraphs,我正在为R()使用伟大的动态图软件包 我现在的代码是: 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", xl

我正在为R()使用伟大的动态图软件包

我现在的代码是:

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

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

drat_binned <- cut(james$drat, breaks=5, labels=1:5)
对于第1列,我们只保留
mpg
值,其中
drat\u bined
等于1,对应地,对于第2-5列。然后将变量添加到原始数据集中:

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

不是很优雅,但有点像作品。唯一能揭示所使用技巧的是图例,它与X1-X5标签混淆

我知道这是一个老问题,但我使用
drawPointCallback
找到了一个潜在的解决方案。我希望它能帮助其他人。如果不想使用原始数字,可以选择R或JavaScript中的比例

library(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)
p %>%
  dyCallbacks("drawPointCallback" = sprintf(
    "
function(g, name, ctx, canvasx, canvasy, color, radius, index) {
  var drat = %s;
  radius = drat[index];
  return Dygraph.Circles.DEFAULT(g, name, ctx, canvasx, canvasy, color, radius)
}
",
    jsonlite::toJSON(mtcars$drat)
    )
  )
库(动态图)
詹姆斯
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
library(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)
p %>%
  dyCallbacks("drawPointCallback" = sprintf(
    "
function(g, name, ctx, canvasx, canvasy, color, radius, index) {
  var drat = %s;
  radius = drat[index];
  return Dygraph.Circles.DEFAULT(g, name, ctx, canvasx, canvasy, color, radius)
}
",
    jsonlite::toJSON(mtcars$drat)
    )
  )