Ярлыки динамических данных в geom_bar

Я использую ggplot2 geom_bar для создания серии гистограмм. У каждого города есть три точки данных, и я рисую график для каждого города. Я хочу пометить второй и третий столбцы на каждой диаграмме как процент от предыдущего столбца (например, данные, которые выглядят как 5, 4, 3, будут читать 5, 80%, 75%).

В этих данных значение I am должно быть меткой для столбца 1 на всех графиках. dum2 / dum1 * 100 должно быть меткой для бара со значением dum2. dum3 / dum2 * 100 должно быть меткой для бара со значением dum3.

Пример

State <- c("AA","AB","AC","AD","AE")
dum1 <- c(34, 30, 8, 22, 5)
dum2 <- c(22.5, 28.1, 3, 12, 1)
dum3 <- c(12.8, 23, 2.8, 11.9, 0.3)
df <- data.frame(State, dum1, dum2, dum3)
m1 <-melt(df)

for(i in levels(m1$State)) 
p <- ggplot(subset(m1, State==i), aes(variable, value,  fill = variable)) +
facet_wrap(~ State) + 
geom_bar(stat="identity", show_guide=FALSE) + 
geom_text(aes(x=variable, y=value + 2, label=round(value,digits=0)), vjust=0,
        size=30) +
theme(axis.title.x = element_blank(),
    plot.background = element_rect(fill = "transparent", color=NA),
    panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
    panel.border = element_blank(), panel.background = element_blank(),
    axis.line = element_blank(), axis.title.y=element_blank(),
    axis.line = element_blank(), 
    axis.text.x = element_blank(), 
    axis.text.y = element_blank(),
    axis.ticks = element_blank(), 
    axis.title.y = element_blank(),
    strip.text.x = element_blank(),
    strip.background = element_rect(fill="transparent")
     ) +
     scale_y_continuous(limits=c(0,40)) +
    scale_fill_manual(values=c("navy", "coral", "gold")) +
  ggsave(sprintf("plot %s.jpg", i))

Я попытался добавить столбец с рассчитанным процентом для соответствующих строк, но не знаю, как вызвать столбец только для выбранных точек данных на графике. Я использовал что-то вроде

lab<-c(0,0,0,0,0,66.2,93.7,37.5,54.5,20.0,56.9,81.9,93.3,99.2,30.0)

но не могу понять, как правильно назвать это для правильных столбцов.


person gxq9    schedule 27.10.2015    source источник
comment
почему бы просто не заменить нули числами, которыми должны быть помечены первые столбцы? например lab ‹- round (c (dum1, dum2 / dum1 * 100, dum3 / dum2 * 100), 1)   -  person janattack    schedule 28.10.2015


Ответы (1)


Без всего постороннего форматирования это, похоже, делает то, о чем вы просите:

ggplot(subset(m1, State=="AA"), aes(variable, value,  fill = variable)) +
  facet_wrap(~ State) + 
  geom_bar(stat="identity", show_guide=FALSE) + 
  geom_text(aes(x=variable, y=value + 2, 
                label=paste0(round(value/c(1,0.01*head(value,-1))),c("","%","%"))))

person jlhoward    schedule 28.10.2015