2017-12-09 37 views
1

:ggvis에서 포인트 크기와 색상을 동시에 조절하는 방법은 무엇입니까? 이 같은 data.frame을 고려

df <- data.frame(t = rep(seq(from=as.POSIXct('00:15:00',format='%H:%M:%S'), 
          to=as.POSIXct('24:00:00',format='%H:%M:%S'),by='15 min'),times=2), 
        y = c(rnorm(96,10,10),rnorm(96,40,5)), 
        group = factor(rep(1:2,each=96)), 
        type = factor(rep(1:3,each=64))) 

ggvis을 사용하여, 나는 선이 group별로 그룹화 된 점 - 선 그림을 생성합니다. type==1type==2와 포인트의 크기가 모두 50 동안 type==3와 점의 크기는 포인트의 컬러 green, blueredtype1, type2type3에 대응하고 있어야 100이어야한다. 내가 Error: length(x) not less than or equal to 2의 오류

df <- data.frame(df,id=1:nrow(df)) 

all_values <- function(x) { 
    if(is.null(x)) return(NULL) 
    row <- df[df$id == x$id, ] 
    paste0(names(row), ": ", format(row), collapse = "<br />") 
} 

ggvis(data=df,x=~t,y=~y,stroke=~group) %>% 
    layer_points(fill=~type,size=~type, key:=~id, fillOpacity := 0.5, 
       fillOpacity.hover := 0.8,size.hover := 500) %>% 
    scale_nominal("size",domain = c(1,2,3), range = c(50,50,100)) %>% 
    scale_nominal("fill",domain = c(1,2,3), range = c('green','blue','red')) %>% 
    layer_lines() %>% 
    add_tooltip(all_values,'click') %>% 
    add_legend(scales=c("fill","size"), properties = legend_props(legend = list(y = 150))) %>% 
    set_options(duration = 0) %>% 
    add_axis(type="x",format="%H:%M") 

: 여기 내 ggvis 코드입니다. 왜 이런 일이 발생했으며 어떻게 해결할 수 있습니까?

+0

'range = c (50,50,100)'은 여전히 ​​숫자 값을 선호하는 경우'range = c (50,100)'으로 변경해야합니다. – MKR

답변

1

scale_nominal("size",domain = c(1,2,3), range = c(50,50,100))scale_nominal("size",domain = c(1,2,3), range = c('50','50','100'))으로 대체해야합니다.

0

오류의 원인은 range에 대해 정의 된 두 개 이상의 값입니다. range에 대한 정의는 다음을 제안합니다. For numeric values, the range can take the form of a two-element array with minimum and maximum values.

For ordinal data, the range may by an array of desired output values, which are mapped to elements in the specified domain. 이 경우 값은 문자로 정의해야합니다.

이렇게하면 오류가 해결됩니다.

+0

예, 저는 여러 번 sencond 문장을 이해하려고했습니다. 그러나''배열은 나를 혼란스럽게 만들었다. –