2014-04-30 6 views
3

미리 정의 된 y 값에 대해 rCharts에 의해 생성 된 dimple.js의 분산에 수평선을 추가하고 싶습니다.rChart (딤플) 분산 형 플롯에 라인 추가

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를, 무엇을, getClass (클래스 (X)), selfEnv) : 'layer'는 참조 클래스 "Dimple"에 대한 유효한 필드 또는 메소드 이름이 아닙니다.

플롯에서 수평선을 그리는 다른 방법이 있습니까?

답변

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 
+0

감사합니다. 이 수평선이 수평축을 대체하기위한 것이라면 한계를 -2 : 2로 설정하면 더 잘 작동합니다 :'.datum ([{x : -2, y : 0}, {x : 2, y : 0}])'. '_max'가 무엇을 가리키는 지 모르지만 설정시 rhs 축 한계에 미치지 않습니다. – PatrickT