2017-03-20 60 views
0

안녕하세요, 특정 하위 집합의 레이블 만 표시하려고 할 때 미학 오류가 발생했습니다. 예를 들어. 나는이 작업을 수행 할 때R ggrepel : 일부 레이블 숨기기

library("ggplot2") 
library(gplots) 
library(ggrepel) 

set.seed(10) 
data <- data.frame(label=letters[1:21], number= runif(21, min=0, max=100)) 
data$label <-factor(data$label) 

ggplot(data, aes(x=label, y=number, fill=data$label)) + 
geom_bar(stat="identity") + 
geom_text_repel(data= data[data$number > 80,], aes(label =data$label), 
        arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" ) 

나는 내가 여전히 오류가 발생하는 등 c("label1","label2") 벡터와 라벨을 교체하는 경우에도 다음과 같은 오류를

Error: Aesthetics must be either length 1 or the same as the data (2): label, x, y, fill 

를 얻을.

나는 잘못된 것을하고 있지만 그것을 이해할 수는 없습니다. 이 작업을 수행 할 수있는 유일한 방법은 동일한 길이의 별도 벡터를 만들어 레이블로 사용하는 것입니다. 그러나 직접 하위 집합하는 방법이 있다고 생각합니다. 감사!

+2

'$'insed'aes'를 절대로 사용하지 마십시오. – Axeman

답변

3

변경 코드는 :

ggplot(data, aes(x=label, y=number, fill=data$label)) + 
geom_bar(stat="identity") + 
geom_text_repel(data= data[data$number > 80,], aes(label =label), ##<- Change here 
        arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" ) 

문제는 당신이 label이 2 행 내에서 평가하려는 반면에 당신이 data$label, 21 행 dataframe 내 열 사용 geom_text_repel()aes에 대한 호출에 데이터의 서브 세트.

이 경우 데이터를 data으로 호출하여 문제를 가려 냈으므로보다 의미있는 것으로 부르면 오류를 발견하는 것이 더 간단 할 수 있습니다.

+0

큰 감사, 그것은 여전히 ​​실패했지만 필자는 데이터 $ label로 채우기도 잘못되었음을 알았 기 때문에 귀하의 의견에 도움이됩니다. 레이블을 변경하자마자 바로 작업했습니다. geom_bar (stat = "identity") + geom_text_repel (데이터 = 데이터 [데이터 $ 번호> 80,], aes (데이터, aes (x = 라벨, y = 번호, 채우기 = 라벨) label = label), ## <- 여기에서 변경 화살표 = 길이 (길이 = 단위 (0.01, 'npc')), box.padding = 단위 (1.5, 'lines'), 색상 = '검정')' 다시 한번 감사드립니다. 많이 감사합니다. – Ahdee