我想将水平线添加到由rCharts在预定义的y值上创建的dimple.js中的散点。
library(rCharts)
df <- data.frame(a = rnorm(10), b = rnorm(10))
d1 <- dPlot(b~a,
data = df,
type = "bubble"
)
d1
我尝试添加:
d1$layer(y= 0, copy_layer=T, type='line', color=list(const='red'))
但是这会返回消息:
envRefInferField(x,what,getClass(class(x)),selfEnv)中的错误: 'layer'不是引用类“Dimple”的有效字段或方法名称
是否有其他方法可以在图中获得水平线?
答案 0 :(得分:4)
非常好的问题,我很高兴你问。此功能将与this pull request一起添加。目前,您可以按require(devtools); install_github("rCharts","timelyportfolio",ref="dimple_layer")
进行测试。这是你的例子重新工作几乎正确。另外,我还添加了一些其他注意事项我还在尝试the dimple aggregation working correctly in rCharts。你会看到一个不太完美的解决方法。
library(rCharts)
df <- data.frame(id = 1:10, a = rnorm(10), b = rnorm(10))
d1 <- dPlot(b~a,
groups = "a",
data = df,
type = "bubble"
,defaultColors = "#!['blue']!#"
)
d1$xAxis(type="addMeasureAxis")
d1$yAxis(type="addMeasureAxis",overrideMin = -2, overrideMax = 2)
d1
d1$layer(
y ~ x
,groups = c("x","y")
,data = data.frame(x = c(1,10), y = rep(0,2))
,type="line"
)
d1
目前,更好的处理方法可能是使用afterScript
在顶部绘制一条线。正如你所看到的,这绝对是一项正在进行的工作,而且太过于苛刻。
library(rCharts)
df <- data.frame(id = 1:10, a = rnorm(10), b = rnorm(10))
d1 <- dPlot(b~a,
groups = "a",
data = df,
type = "bubble"
,defaultColors = "#!['blue']!#"
)
d1$xAxis(type="addMeasureAxis")
d1$yAxis(type="addMeasureAxis",overrideMin = -2, overrideMax = 2)
d1
d1$setTemplate(
afterScript = sprintf(
'
<script>
var line = d3.svg.line()
.x(function(d) { return myChart.axes[0]._draw.scale()(d.x); })
.y(function(d) { return myChart.axes[1]._draw.scale()(d.y); });
d3.select("#%s svg g")
.append("path")
.datum([{x:myChart.axes[0]._min,y:0},{x:myChart.axes[0]._max,y:0}])
.attr("d",line)
.style("stroke","blue")
.style("stroke-width",3)
</script>
'
,d1$params$dom
))
d1