2013-04-08 6 views
6

ggplot2를 사용하여 R 기본 플롯의 더 나은 버전을 만들려고합니다. 일반적인 전설이있을뿐만 아니라 ggplot2 스타일과 사용자 정의가 마음에 든다. 내 데이터는 몇 가지 (그러나 다른) 치료에 대해 동일한 두 그룹의 관찰을 포함하는 세 개의 개별 데이터 세트로 구성됩니다. 따라서 저는 다른 요인 레벨을 사용하여 일반적인 범례와 함께 하나의 그래프에 3 개의 개별 플롯을 생성하려고합니다.다중면이있는 ggplot2의 클러스터 된 막대 그래프에서 빈 요소 제거

foo<-data.frame(c(letters,letters),c(rep('T1',26),rep('T2',26)), 
runif(52),rep(c(rep('Ori1',12),rep('Ori2',8),rep('ori3',6)),2)) 
names(foo)<-c('Treatment','Type','Count','Origin') 

a<-ggplot(foo,aes(x = factor(Treatment),y = Count)) 
a+ facet_grid(Origin~., scales="free_y", space="free") + 
geom_bar(stat="identity",aes(fill=factor(foo$Type)),position="dodge") 
+theme_bw()+theme(axis.text.x=element_text(angle=60,hjust=1))+coord_flip() 
: r base plot closest plot realisation

내 데이터로 정확히 같은 구조를 가지고 더미 데이터로 ggplot2 플롯을 생성하려고 : 여기에 첫 번째 이미지는 지금까지 R 기반으로 생성 한 것입니다 나의 점을 설명하기 위해

다음과 같은 바람직하지 않은 결과가 나옵니다. failed ggplot2 image

나는 스택 오버플로 주제를 알고 Removing Unused Factors from a Facet in ggplot2How can I remove empty factors from ggplot2 facets? 그러나, 그들은 내가 여기에 실현하기 위해 노력 클러스터 된 막대 그래프를 처리하지 않으며 그러나 나는 지금 그것을 어떻게 해결하지 않는, 그들은 문제가있다 생각합니다. 모든 지침을 환영합니다.

+3

필자는이 문제가 해결 될 때까지 (복잡한 경우) 'coord_flip'을 생략하고 대신 'facet_wrap (~ Origin, scales = "free_x")'를 사용하는 것으로 착각합니다. – joran

+0

@joran 주석 주셔서 감사합니다. 문제를 해결하지 못합니다. 'coord_flip'은 여기에 문제를 일으키지 않습니다. 그런 식으로 서식을 지정할 것을 좋아하기 때문에 포함 시켰습니다. 가장 중요한 문제는 패싯 전체에 걸쳐'position = "닷지"를 유지하는 방법입니다. 아마 내가 기본 그래프를 그렇게 재현하고 싶지는 않다는 것을 분명히해야합니다. 단지 ggplot2 스타일에서 사용할 수있는 플롯의 본질을 원합니다. –

+1

내가 제안한 것을 실제로 시도한 것 같지 않습니다. 요점은'coord_flip'이 항상'scales = "free"로 멋지게 재생되는 것은 아니라는 것입니다. 이는 알려진 문제입니다. – joran

답변

7

내 의견을 설명하기 : 당신이 coord_flip를 추가하고 free_y로 전환하는 경우가 있습니다 무료 저울의 일부 유형 작동하지 coord_flip에 대한 특정 오류를 얻을

enter image description here

a<-ggplot(foo,aes(x = factor(Treatment),y = Count)) 
a+ facet_wrap(~Origin, scales="free_x") + 
    geom_bar(stat="identity",aes(fill=factor(Type)),position="dodge") + 
    theme_bw() + 
    theme(axis.text.x=element_text(angle=60,hjust=1)) 
당신 문제의 근원.

+1

'fill = factor (foo $ Type)'에'foo $'가있는 이유는 무엇입니까? 그럴 필요는 없습니다. 그것은 사실 내가 생각했던 것과 상당히 다른 플롯을 변경합니다 :'ggplot (data = foo, aes (x = factor (Treatment), y = Count)) + geom_bar (stat = "identity", aes (fill = factor – Arun

+1

@Arun 당신 말이 맞아요. 전 단지 코드를 복사 + 붙여 넣기 만 했었고, 그 자리에 " 사용하지 않은 요인을 제거하는 데 중점을 두었습니다. – joran

+0

둘 다 감사합니다! 명백하게 근원 ~. 원래 facet.wrap에서 내가 원하는 것을 생성하지 못했지만 foo $ Type 대신 Type을 사용하여 오류가 발생했습니다 (동일해야합니다). @ Arun : 당신의 의견은 제가 원했던 그대로 정확하게 저에게 준 것입니다. @ 죠란 : coord_flip과 함께이 일반적인 오류를 지적 해 주셔서 고마워요 ... 그러면 정상적인 누적 막대 그래프를 고수하겠습니다. –

관련 문제