2014-10-29 4 views
0

나는 차트를 만들었고 변수를 기반으로 x 축 항목 중 하나에 색상을 지정하려고합니다. 이 게시물 (How to get axis ticks labels with different colors within a single axis for a ggplot graph?)을 보았지만이를 내 데이터 세트에 적용하는 데 어려움을 겪고 있습니다. enter image description here컬러 단일 ggplot 축 항목

df1 <- data.frame(var=c("a","b","c","a","b","c","a","b","c"), 
        val=c(99,120,79,22,43,53,12,27,31), 
        type=c("alpha","alpha","alpha","bravo","bravo","bravo","charlie","charlie","charlie")) 

myvar="a" 

ggplot(df1,aes(x=reorder(var,-val), y=val,fill=type)) + geom_bar(stat="identity") 

myvar 동일 할 때 x 축 값 빨간색을 만드는 방법에 대한 모든 팁은?

업데이트 : 일부 안내는 @ddiez에게 감사드립니다. 필자는 플로팅하기 전에 순서를 바꾸어야한다는 사실에 마침내 다가 섰다. data.table로 원래 예제를 만들어야 했으므로 원본 응답에 영향을 미칠지 확실하지 않습니다. 내 원래 데이터 집합을 data.table로 수정하고 다음 코드를 사용하여 성공을 달성했습니다.

df1 <- data.table(var=c("a","b","c","a","b","c","a","b","c"), 
        val=c(99,120,79,22,43,53,12,27,31), 
        type=c("alpha","alpha","alpha","bravo","bravo","bravo","charlie","charlie","charlie")) 

myvar="a" 

df1[,axisColour := ifelse(var==myvar,"red","black")] 
df1$var <- reorder(df1$var,-df1$val,sum) 

setkey(df1,var,type) 

ggplot(df1,aes(x=var, y=val,fill=type)) + geom_bar(stat="identity") + 
    theme(axis.text.x = element_text(colour=df1[,axisColour[1],by=var][,V1])) 

enter image description here

답변

0

더 우아한 해결책하지만 빠른 해킹 (당신이 마지막 순서를 알 필요) 것있을 수 있습니다 :

ggplot(df1,aes(x=reorder(var,-val), y=val,fill=type)) + 
geom_bar(stat="identity") + 
theme(axis.text.x = element_text(colour=c("black","black","red"))) 

아직 (변수 myvar를 사용하는 솔루션 , 더 나은 방법이있을 수 있습니다) :

# reorder the factors in the data.frame (instead of in situ). 
df1$var=reorder(df1$var, -df1$val) 

# create a vector of colors for each level. 
mycol=rep("black", nlevels(df1$var)) 
names(mycol)=levels(df1$var) 

# assign the desired ones a different color. 
mycol[myvar]="red" 

ggplot(df1,aes(x=var, y=val,fill=type)) + 
    geom_bar(stat="identity") + 
    theme(axis.text.x = element_text(colour=mycol)) 
+1

이 spe 예를 들어, 원래의 질문에 답하지 못한다. 이것은 값이 변경 될 수있는'myvar '와의 일치에 기반하여 그것을 수행하는 방법이다. – Dan

+0

@ Dan에는 다른 해결책이 포함되어 있습니다. 그래도 더 나은 방법이있을 수 있습니다 ... – ddiez

+0

나는 색 벡터에 대해 당신의 접근법을 상당히 사용하지 않았지만 좋은 지침을주었습니다. 내 대답을 반영하도록 내 질문을 업데이트했지만 귀하의 또는 내 청소기/빠른 접근 방식인지 확실하지 않습니다. – Dan