2013-06-02 30 views
1

我用以下方法制作facet_grid情節:限制類別上刻面數的小情節

sample <- read.csv('sample.csv') 

ggplot(sample, aes(category, count)) + geom_bar() + facet_grid(. ~ parent_id) 

我的數據在下面的方式構造:

id,parent_id, category, count 
1,   21,  C1,  4 
2,   21,  C2,  7 
3,   21,  C3,  4 
4,   22,  D1,  28 
5,   22,  D2,  20 
6,   22,  D3,  0 
7,   22,  D5,  1 
8,   22,  D6,  4 
9,   22,  D7,  1 
10,   23,  E1,  17 
11,   23,  E2,  33 
12,   23,  E3,  31 

當我做的這一個方面的情節,它看起來像這樣:

enter image description here

我想要的是限制每個方面的類別數量,因此我只在第一個方塊(等)上顯示C1, C2, C3。有沒有一種方法可以限制這裏顯示的類別數量?


這裏是dput(sample)輸出和我的繪圖命令,讓自己的形象可以很容易地複製:

sample <- 

structure(list(id = 1:12, parent_id = c(21L, 21L, 21L, 22L, 22L, 
22L, 22L, 22L, 22L, 23L, 23L, 23L), category = structure(1:12, .Label = c("  C1", 
"  C2", "  C3", "  D1", "  D2", "  D3", "  D5", 
"  D6", "  D7", "  E1", "  E2", "  E3"), class = "factor"), 
    count = c(4L, 7L, 4L, 28L, 20L, 0L, 1L, 4L, 1L, 17L, 33L, 
    31L)), .Names = c("id", "parent_id", "category", "count"), class = "data.frame", row.names = c(NA, 
-12L)) 

ggplot(sample, aes(category, count)) + geom_bar() + facet_grid(. ~ parent_id) 

回答

2

您可以添加到scales="free_x"facet_grid()。在這種情況下,對於每個方面,只有在用於特定方面的值的範圍內纔會有x值。通過添加space="free_x",您可以確保酒吧在所有方面具有相同的寬度。

ggplot(sample, aes(category, count)) + geom_bar() + 
    facet_grid(. ~ parent_id,scale="free_x",space="free_x") 

enter image description here

+0

謝謝!這非常有用。有沒有一種方法來固定寬度,使所有的鋼筋具有相同的厚度? 'geom_bar(width = .5)'似乎與總面寬度成正比,並且與條形本身不成比例。 – djq

+0

@celenius看到我更新的回答 –

+0

哦,太棒了!謝謝。我必須花更多時間閱讀和理解'facet_grid()' – djq