Выравнивание чисел на отдельных барах

Мне нужно разместить метки над полосами на ggplot. Раньше я использовал найденный метод (ЗДЕСЬ), но это больше не работает с момента моего обновления ggplot2, поскольку теперь я получаю сообщение об ошибке:

Error in continuous_scale(c("y", "ymin", "ymax", "yend", "yintercept",  : 
  unused argument(s) (formatter = "percent")

Как я могу снова построить числовые значения над полосами при использовании примера:

df <- structure(list(A = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L), .Label = c("0-50,000", "50,001-250,000", "250,001-Over"), class = "factor"),
    B = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("0-50,000",
    "50,001-250,000", "250,001-Over"), class = "factor"), Freq = c(0.507713884992987,
    0.258064516129032, 0.23422159887798, 0.168539325842697, 0.525280898876405,
    0.306179775280899, 0.160958904109589, 0.243150684931507,
    0.595890410958904)), .Names = c("A", "B", "Freq"), class = "data.frame", row.names = c(NA,
-9L))

library(ggplot2)

ggplot(data=df, aes(x=A, y=Freq))+
    geom_bar(aes(fill=B), position = position_dodge()) + 
    geom_text(aes(label = paste(sprintf("%.1f", Freq*100), "%", sep=""),
                  y = Freq+0.015, x=A),
              size = 3, position = position_dodge(width=0.9)) +
    scale_y_continuous(formatter = "percent") +
    theme_bw()

Запуск R 2.15 ggplot2 0.9 на машине с Win 7


person Tyler Rinker    schedule 11.04.2012    source источник


Ответы (1)


Ошибка связана с вызовом scale_y_continuous. Форматирование меток теперь обрабатывается аргументом labels. Дополнительные сведения см. в руководстве по переходу на ggplot2 0.9.0.

Была еще одна проблема с неправильным расположением меток; Я исправил это, добавив group=B к эстетике geom_text; Хотя я не совсем уверен, зачем это нужно. Я также убрал x=A из эстетики geom_text, потому что он не нужен (он будет унаследован от вызова ggplot.

library("ggplot2")
library("scales")

ggplot(data=df, aes(x=A, y=Freq))+
    geom_bar(aes(fill=B), position = position_dodge()) + 
    geom_text(aes(label = paste(sprintf("%.1f", Freq*100), "%", sep=""),
                  y = Freq+0.015, group=B),
              size = 3, position = position_dodge(width=0.9)) +
    scale_y_continuous(labels = percent) +
    theme_bw()

введите здесь описание изображения

person Brian Diggs    schedule 11.04.2012
comment
Черт, я пробовал labels =percent (когда я проверил ? scale_y_continuous), но не пробовал без кавычек. Так близко, но так далеко. Спасибо Брайан. - person Tyler Rinker; 12.04.2012
comment
Вам не только не нужны кавычки, но и функции форматирования теперь находятся в пакете scales, поэтому его также необходимо загрузить. - person Brian Diggs; 12.04.2012