Часто бывает, что я расплавляю свои фреймы данных, чтобы показать несколько переменных на одном графике.Цель состоит в том, чтобы создать geom_bar
с одним параметром для каждой переменной и одну сводную метку для каждого бара.
Например, я сделаю это:
mtcars$id<-rownames(mtcars)
tt<-melt(mtcars,id.vars = "id",measure.vars = c("cyl","vs","carb"))
ggplot(tt,aes(variable,value))+geom_bar(stat="identity")+
geom_text(aes(label=value),color='blue')
Результатом является график, в котором метка для каждого столбца повторяется для каждого случая (кажется):
То, что я хочу иметь, - это одна метка длякаждый столбец, например:
Распространенным решением является создание агрегированных значений для размещения на графике, например:
aggr<-tt %>% group_by(variable) %>% summarise(aggrLABEL=mean(value))
ggplot(tt,aes(variable,value))+geom_bar(stat="identity")+
geom_text(aes(label=aggr$aggrLABEL),color='blue')
или
ggplot(tt,aes(variable,value))+geom_bar(stat="identity")+
geom_text(label=dplyr::distinct(tt,value),color='blue')
Однако эти попытки приводят к ошибкам соответственно:
Для решение 1: Ошибка: эстетика должна быть либо длины 1, либо одинаковойв качестве данных (96): метка, х, у
для решение 2: ошибка в [<-.data.frame
(*tmp*
, aes_params, значение = список (метка = список (: замена)элемент 1 представляет собой матрицу / фрейм данных из 7 строк, необходимо 96
Итак, что делать? Установка geom_text
в stat="identity"
тоже не помогает.