径向时间序列,附加圆

时间:2019-07-08 09:57:38

标签: javascript d3.js

我想在径向时间序列图上附加一些圆圈,以指示关键事件。等效块here

静态图片:

enter image description here

圈子的代码:

library(ggplot)
library(data.table)

n <- 1000
X <- data.table(score = c(rnorm(n, -4, 1), rnorm(n, 0, 3)),
                group = rep(c("A", "B"), each = n))

X[, group := factor(group, levels = c("B", "A"))]

ggplot(X, aes(score, fill = group, color = group)) + 
  geom_density(aes(y=..scaled..)) +
  scale_fill_manual(values = c("darkgreen", "firebrick4")) +
  scale_color_manual(values = c("darkgreen", "firebrick4"))

var eventCircles = g.selectAll('.eventCirc') .data(eventData) .enter() .append('circle') .attr('class','eventCirc') .attr('cx', function(d) { return x(d.date); }) .attr('cy', function(d) { return y(0)}) .attr('r', 5) .style('fill', "#003366"); 比例尺似乎工作正常,因为单位均为像素,但是我不知道如何将度数转换为像素以与y(0)一起使用-这是必需的一个圆圈的属性。

刻度设置为:

cx

问题

如何结合使用var x = d3.scaleTime() .range([0, fullCircle]); var y = d3.scaleRadial() .range([innerRadius, outerRadius]); d.date标度来为我提供x属性的像素坐标(而不仅仅是度/弧度)?

1 个答案:

答案 0 :(得分:2)

您在这里需要一些三角函数。给定您链接的特定bl.ocks,这就是您需要的数学:

eventCircles.attr('cx', function(d) {
    return y(d.Close) * -Math.sin(x(d.Date) + Math.PI)
  })
  .attr('cy', function(d) {
    return y(d.Close) * Math.cos(x(d.Date) + Math.PI)
  })

在链接的bl.coks中,Close是y值,Date是x值。根据您的数据进行更改。

这是分叉的bl.ocks:https://blockbuilder.org/GerardoFurtado/16adc1bb5677adfa501b3a03b3637d75