我想在径向时间序列图上附加一些圆圈,以指示关键事件。等效块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
属性的像素坐标(而不仅仅是度/弧度)?
答案 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