2016-11-14 6 views
0

에 나는 dataframe 나는 facet_grid을 수행하여 내 데이터를 플롯 할 df드롭되지 않는 수준 ggplot2

df<- structure(list(Categorie = structure(c(1L, 1L, 2L, 2L, 4L, 4L, 
3L, 1L, 1L, 2L, 2L, 4L, 4L, 3L, 1L, 1L, 2L, 2L, 4L, 4L, 3L, 1L, 
1L, 2L, 2L, 4L, 4L, 3L, 1L, 1L, 2L, 2L, 4L, 4L, 3L, 1L, 1L, 2L, 
2L, 4L, 4L, 3L, 1L, 1L, 2L, 2L, 4L, 4L, 3L, 1L, 1L, 2L, 2L, 4L, 
4L, 3L), .Label = c("Age classes", "Climate", "Nutrient availability", 
"PFT"), class = "factor"), Sub_categories = structure(c(7L, 4L, 
6L, 1L, 3L, 2L, 5L, 7L, 4L, 6L, 1L, 3L, 2L, 5L, 7L, 4L, 6L, 1L, 
3L, 2L, 5L, 7L, 4L, 6L, 1L, 3L, 2L, 5L, 7L, 4L, 6L, 1L, 3L, 2L, 
5L, 7L, 4L, 6L, 1L, 3L, 2L, 5L, 7L, 4L, 6L, 1L, 3L, 2L, 5L, 7L, 
4L, 6L, 1L, 3L, 2L, 5L), .Label = c("Continental", "DBF", "ENF", 
"Intermediate-Old", "Low-High", "Temperate", "Young"), class = "factor"), 
    Variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L), .Label = c("Age", "Clay content", "GPP", "GPP*Age", 
    "GPP*P", "GPP*P trend", "N availability", "SPI"), class = "factor"), 
    Importance = c(19.2, 23.7, 45.2, 45.7, 39, 66.8, 34.8, 10.9, 
    16.2, 9.2, 6.3, 15.7, 2.1, 10, 13.2, 7.1, 6.1, 3.8, 2.4, 
    7.3, 5.2, 6.4, 10, 6.6, 3.7, 2.9, 5.8, 8.4, 17.7, 0, 6.1, 
    5.2, 8.4, 2.8, 6.7, 11.8, 21.1, 9.8, 21.9, 20, 6.3, 13.5, 
    2.3, 7.6, 3.9, 1.3, 3.9, 0.4, 3.8, 10.9, 7.5, 4.5, 5.8, 0.3, 
    2.5, 9.4)), .Names = c("Categorie", "Sub_categories", "Variable", 
"Importance"), class = "data.frame", row.names = c(NA, -56L)) 

이 coord_flip. CategorieSub_categories 개의 변수가 있습니다. 거기에 아무런 정보가 없기 때문에 그들이 안하지만

library(ggplot2) 

ggplot(data = var_Imp) + 
    geom_bar(mapping = aes(x = Variable, y = Importance, fill=Variable), width = 1, stat= "identity", position = "stack") + 
    coord_flip() + 
    facet_grid(Categorie~Sub_categories, scales="free", space="free", shrink=TRUE, drop=TRUE)+ 
    theme_bw(base_size = 14, base_family = "Helvetica")+ 
    theme(axis.ticks.length=unit(-0.25, "cm"), 
     legend.position="none", 
     legend.box="horizontal", 
     legend.key = element_blank(), 
     legend.text=element_text(size=14), 
     axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
     axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
     axis.ticks.y=element_blank())+ 
    xlab("") + 
    ylab("Relative contribution [%]")+ 
    scale_fill_brewer(type = "div") 

그러나,면의 일부에 대한 정보는 없음으로 수준이 여전히 플롯 : 나는 아래 명령 줄을 실행합니다. scales="free"space="free" 매개 변수가 작업을 수행하지만 분명히 그렇지 않다고 생각했습니다. 사용하지 않은 레벨을 사용하지 않고 데이터를 플롯 할 수있는 사람은 누구입니까? 감사합니다.

+2

['? droplevels'] (http://stackoverflow.com/questions/1195826/drop-factor-levels-in-a-subsetted-data-frame)를 참조하십시오. –

+0

문제는'categorie'와'Sub_categories' 변수 사이의 상호 작용에서 비롯됩니다. 이론 상으로는 모든 레벨이 상호 작용의 일부만 사용되고 있습니다. –

답변

0

ggplot2의 특정 명령에 대해 잘 모릅니다. 두 가지 가능한 옵션 :

1)이 게시물 ggplot2: How to force the number of facets with too few plots?

2)에서 제안 된 옵션 중 하나) .svg (또는 기타의 vectorial 형식으로 플롯을 보냅니다 잉크 스케이프 나 다른 프로그램을 열고 빈 삭제 패싯