2017-10-02 11 views
0

대륙에 걸쳐 분포하는 상품 세트 (사과, 바나나, 감자 등)가 있다고 가정합니다. 우리는 ggplot2 패키지의 파셋 형 바 사르트 (barcharts)를 통해 대륙에서의 분포를 시각화하고, 이들 물품 ("stuff"필드 다음에 나오는)은 x 축에 표시 할 요소로 작용합니다. 각 대륙은 데이터에 표시된대로 자체 상품 세트를 가지고 있지만 특정 상품이 두 개 이상의 대륙에서 공통적으로 사용될 수 있습니다 (바나나). 다음은 짧은 형식의 데이터 예제입니다. 필드 "매체"와 "거인"은 시장을 세분화하여 중간 크기와 큰 크기 (다른 색상으로 그려 짐)로 분리합니다. 물건에R : ggplot2 barchart에서 각 패싯에 대해 고유 한 요소 집합을 그립니다.

library(dplyr) 
library(tidyr) 
library(ggplot2) 
data.tidied<-data %>% 
    gather(key=size, value=val,-continent,-stuff) 
ggplot(data.tidied,aes(x=stuff,y=val,fill=size))+ 
geom_col(position="dodge")+ 
facet_grid(~continent)+coord_flip() 

barchart with shared factors across facets

모든 요소는 모든 대륙에 걸쳐 정렬, 비록 :

data<-read.csv(text="continent,stuff,average,giant 
North America,apples,20,30 
North America,bananas,25,32 
Europe,bananas,15,25 
Europe,potatoes,10,20 
Europe,mosquitoes,13,17 
Asia,snakes,26,35 
Asia,snails,7,15 
Asia,pandas,10,20") 

먼저 우리는 geom_col() 및 페이스 팅 기법을 통해 긴 형식 및 다음 플롯을에 데이터를 감소 대부분은 필요하지 않으므로 많은 격차가 있습니다. 그러나 우리는 북미와 유럽에서 달팽이가 필요하지 않으며, 아시아 패싯에만이 분야를 사용하는 것이 당연합니다. 상황을 명확하게하기 위해 사과/바나나/감자를 대륙 고유의 일부 지역으로 생각할 수 있습니다. 유럽에는 캘리포니아가 없습니다. 따라서 : ggplot (또는 다른 대안)의 faceting 기술을 사용하여이 상황을 표시하는 방법은 무엇입니까? 즉, 각 패싯에 대해 고유 한 요소 집합을 그리는 방법은 무엇입니까?

답변

2

facet_grid 대신 facet_wrap을 사용하고 scales = "free_y" (축을 뒤집을 때 free_y이어야 함)을 지정할 수 있습니다. 하지만 내 생각에 차트가 좀 이상하게 보입니다.

data %>% 
    gather(size, val, -continent, -stuff) %>% 
    ggplot(aes(stuff, val)) + 
    geom_col(aes(fill = size), position = "dodge") + 
    facet_wrap(~continent, scales = "free_y") + 
    coord_flip() 

enter image description here