2014-12-01 2 views
3

Я не могу понять, почему ggplot участки в целом в середине следующего участка:Отверстие в центре круговой диаграммы с ggplot

enter image description here

Здесь данные и код:

dat15 <- data.frame("Insgesamt" = c(64, 20, 13, 3), 
       "18-29" = c(41, 25, 27, 7), 
       "30-44" = c(58, 25, 12, 5), 
       "45-59"=c(69, 20, 10, 1), 
       "60+" = c(76, 14, 9, 1), 
       "Arbeiter" = c(57, 34, 9, 0), 
       "Angestellte" = c(69, 17, 11, 3), 
       "Beamte" = c(72, 12, 11, 5), 
       "Selbstständige" = c(69, 23, 5, 3), 
       "unter 1000" = c(47, 30, 19, 4), 
       "1000-2000" = c(59, 24, 15, 2), 
       "2000-3000" = c(72, 15, 10, 3), 
       "3000+" = c(68, 19, 10, 3), 
       "seit Geburt" = c(65, 19, 12, 4), 
       "zugez. vor 20" = c(72, 17, 9, 2), 
       "zugez. in 20" = c(46, 28, 19, 7), 
       row.names = c("zum Vorteil", "zum Nachteil", "keine Veränderung", "weiß nicht")) 

dat15 <- melt(dat15) 
dat15$type = c("zum Vorteil", "zum Nachteil", "keine Veränderung", "weiß nicht") 
dat15.1 <- dat15[c(1:4),] 
dat15.1$labelpos <- cumsum(dat15.1$value) - dat15.1$value/2 


plot15.1 <- ggplot() + 
    theme_m(base_family = family,base_size=size) + xlab("") + ylab("") 

plot15.1 <- plot15.1 + 
    geom_bar(ata = dat15.1, aes(x = dat15.1$variable, y = dat15.1$value, 
     fill=dat15.1$type), stat = 'identity') 

plot15.1 <- plot15.1 + coord_polar("y", start = 0) 

ответ

9

Это будет работать, если вы добавите аргумент width = 1 к geom_bar:

ggplot() + 
    geom_bar(data = dat15.1, aes(x = variable, y = value, fill = type), 
      stat = 'identity', width = 1) + 
    coord_polar("y", start = 0) 

enter image description here

+0

Спасибо, человек ... это было последнее, что я бы проверил -.- ' –

1

Другой подход, основанный на примерах в справочном руководстве, чтобы установить x к 1, так называемый «фиктивный» значение:

ggplot() + 
    geom_bar(data = dat15.1, aes(x = 1, y = value, fill = type), 
      stat = 'identity') + 
    coord_polar("y", start = 0) 

Иногда удобно использовать aes_string() вместо:

ggplot() + 
    geom_bar(data = dat15.1, aes_string(x = 1, y = 'value', fill = 'type'), 
      stat = 'identity') + 
    coord_polar("y", start = 0) 

по состоянию на май 2016 года, выход точно так, как показано на Sven Хоэнштайн в принятом ответе.

Я не могу прокомментировать, является ли более целесообразным иметь x = 1 внутри aes() или иметь width = 1 внутри geom_bar().

+0

Поскольку '' ggplot2'' обновляется часто, один из двух подходов может стать устаревшим в будущем, поэтому я решил, что это может быть полезно иметь второй подход. – PatrickT

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