2012-04-10 9 views
4

Я использую следующий построить график приведенный ниже:Отображение только меток, которые используются?

data <- structure(list(Type1 = c("DB", "DB", "DB", "DB", "DB", "DB", 
"DB", "DB", "DB", "DB", "DB", "DB", "DB", "Manual", "Manual", 
"Manual", "Manual", "Manual", "Manual", "Manual", "Manual", "Manual", 
"Manual", "Manual", "Manual", "Manual", "Manual", "Manual"), 
    Type2 = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
    3L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    3L), Category = c("A", "B", "C", "D", "E", "A", "B", "F", 
    "G", "A", "B", "C", "H", "I", "J", "K", "L", "M", "O", "J", 
    "P", "K", "Q", "M", "K", "P", "J", "P"), Percent = c("83.5106383", 
    "9.574468085", "5.85106383", "0.531914894", "1/188*100", 
    "85.24590164", "11.47540984", "1/61*100", "1.639344262", 
    "90", "3.333333333", "3.333333333", "3.333333333", "20.10582011", 
    "10.05291005", "6.349206349", "5.82010582", "4.761904762", 
    "31.14754098", "16.39344262", "6.557377049", "6.557377049", 
    "4.918032787", "30", "23.33333333", "16.66666667", "10", 
    "6.666666667")), .Names = c("Type1", "Type2", "Category", 
"Percent"), row.names = c(NA, -28L), class = "data.frame") 

data$Percent <- as.numeric(data$Percent) 

g= ggplot(data, aes(x=Category, y=Percent)) + 
      geom_bar(width=0.8, stat="identity", position=position_dodge()) + 
      facet_grid(Type1 ~ Type2,) + 
      theme_bw() + 
      coord_flip() + 
      scale_y_continuous(limits=c(0,100)) 

print(g) 

enter image description here

Есть ли способ, что я могу сделать сюжет, таким TAHT каждой строка использует только метка, которые отличны от нуля? Например, возьмите строку DB. Он использует только 6 меток, но отображает все 16 меток, потому что остальные 10 используются частью данных Manual. Аналогично для строки Manual. Я ищу что-то вроде этого:

 1   2    3 
H 
G 
D          DB 
C 
B 
A 

Q 
P 
O 
G          MANUAL 
M 
L 
K 
J 
I 

Любые предложения о том, как это сделать?

+1

Я играл с этим на некоторое время (после того, как я установил проблемы в вашем примере данных) и я начинаю думать, что могут быть некоторые проблемы с facet_grid и аргументом весов. Однако вы также можете использовать facet_wrap, и это работает. – joran

+0

@joran: +1 Спасибо за ваше время. Я тоже играл, и я могу подтвердить, что есть ошибка. Я сообщу об этом в ближайшее время. – Legend

ответ

2

Там, кажется, ошибка или неожиданное поведение при объединении facet_grid(scales="free") и coord_flip().

Здесь возможны 2 обходные:

library(ggplot2) 

# Removed quotes from Percent values, so that Percent will be numeric. 
dat <- structure(list(Type1 = c("DB", "DB", "DB", "DB", "DB", "DB", 
"DB", "DB", "DB", "DB", "DB", "DB", "DB", "Manual", "Manual", 
"Manual", "Manual", "Manual", "Manual", "Manual", "Manual", "Manual", 
"Manual", "Manual", "Manual", "Manual", "Manual", "Manual"), 
    Type2 = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
    3L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    3L), Category = c("A", "B", "C", "D", "E", "A", "B", "F", 
    "G", "A", "B", "C", "H", "I", "J", "K", "L", "M", "O", "J", 
    "P", "K", "Q", "M", "K", "P", "J", "P"), Percent = c(83.5106383, 
    9.574468085, 5.85106383, 0.531914894, 1/188*100, 
    85.24590164, 11.47540984, 1/61*100, 1.639344262, 
    90, 3.333333333, 3.333333333, 3.333333333, 20.10582011, 
    10.05291005, 6.349206349, 5.82010582, 4.761904762, 
    31.14754098, 16.39344262, 6.557377049, 6.557377049, 
    4.918032787, 30, 23.33333333, 16.66666667, 10, 
    6.666666667)), .Names = c("Type1", "Type2", "Category", 
"Percent"), row.names = c(NA, -28L), class = "data.frame") 

figure_1 = ggplot(dat, aes(x=Category, y=Percent)) + 
      geom_bar(width=0.8, stat="identity") + 
      facet_grid(Type2 ~ Type1, scales="free_x") + 
      theme_bw() + 
      scale_y_continuous(limits=c(0, 100)) + 
      opts(title="Figure 1. Success!\n(But Rotated 90 Degrees)") 

figure_2 = ggplot(dat, aes(x=Percent, y=Category)) + 
      geom_point(size=3) + 
      facet_grid(Type1 ~ Type2, scales="free_y") + 
      theme_bw() + 
      scale_x_continuous(limits=c(0, 100)) + 
      opts(title="Figure 2. Success!\n(But Dotplot Instead Of Barplot)") 

# Unexpected interaction between scales="free" and coord_flip()? 
figure_3 = ggplot(dat, aes(x=Category, y=Percent)) + 
      geom_bar(width=0.8, stat="identity") + 
      facet_grid(Type1 ~ Type2, scales="free") + 
      theme_bw() + 
      scale_y_continuous(limits=c(0, 100)) + 
      coord_flip() + 
      opts(title="Figure 3. Strange Y-axis Behavior.") 

enter image description here enter image description here enter image description here

3

Он удалит только те элементы, которые не находятся в ЛЮБОЙ грани. Но вы можете использовать аргумент scale = "free" в facet_grid().

g + facet_grid(Type1 ~ Type2, scales="free") 

Но я думаю, что facet_wrap, может предоставить вам более соответствующей визуализации:

ggplot(data, aes(x=Category, y=Percent)) + 
    geom_bar(width=0.8, stat="identity", position=position_dodge()) + 
    facet_wrap(Type1 ~ Type2,scales="free") + 
    theme_bw() + 
    scale_y_continuous(c(0,100)) + 
    coord_flip() + 
    opts() 

enter image description here

Смежные вопросы