Позиционируйте geom_text на уклоняемом штриховом графике

99

Я попытался сделать заголовок понятным, но сначала данные:

dtf <- structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", "fla"), class = "factor"), 
    ustanova = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("srednja škola", "fakultet"), class = "factor"), 
    `(all)` = c(42.9542857142857, 38.7803203661327, 37.8996138996139, 
    33.7672811059908, 29.591439688716, 26.1890660592255, 27.9557692307692, 
    23.9426605504587, 33.2200772200772, 26.9493087557604)), .Names = c("variable", 
"ustanova", "(all)"), row.names = c(NA, 10L), class = c("cast_df", 
"data.frame"), idvars = c("variable", "ustanova"), rdimnames = list(
    structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 
    3L, 4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", 
    "fla"), class = "factor"), ustanova = structure(c(1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("srednja škola", 
    "fakultet"), class = "factor")), .Names = c("variable", "ustanova"
    ), row.names = c("vma_srednja škola", "vma_fakultet", "vla_srednja škola", 
    "vla_fakultet", "ia_srednja škola", "ia_fakultet", "fma_srednja škola", 
    "fma_fakultet", "fla_srednja škola", "fla_fakultet"), class = "data.frame"), 
    structure(list(value = structure(1L, .Label = "(all)", class = "factor")), .Names = "value", row.names = "(all)", class = "data.frame")))

И я хотел бы создать полосатую диаграмму с уклонением, сделать coord_flipи поместить несколько текстовых меток внутри полос:

ggplot(bar) + geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
 geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), position = "dodge") +
 coord_flip()

вы можете увидеть результат здесь .

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

Думаю, я прошу о чём-то банальном. Я хочу, чтобы текстовые метки «следовали» за полосами, сложенными в стопку. Ярлыки правильно размещены по оси Y, но как правильно разместить их по оси X?

aL3xa
источник
Да ... Я должен был разместить это в списке рассылки ggplot2. Я не хочу делать кросс-посты, поэтому надену шляпу терпения и подожду, пока @hadley что-нибудь придумает! =)
aL3xa
Я был неправ. И мне, видимо, нужно поближе познакомиться с пакетом ggplot.
Джорис Мейс

Ответы:

158

Это то, что вы хотите?

ggplot(bar) + 
  geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
  geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), 
            position = position_dodge(width = 1)) + 
  coord_flip()

Клавиша используется position = position_dodge(width = 1)вместо position = "dodge", это просто ярлык без каких-либо параметров.

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


Здесь ggplot2_2.0.0вы найдете несколько примеров ?geom_textтого, как позиционировать geom_textна уклоненных или сложенных полосах (фрагмент кода с именем " # Aligning labels and bars"). Вопросы и ответы Что такое аргумент ширины в position_dodge?" Обеспечивает более подробное описание темы.

Коске
источник
1
Именно то, что я хочу! Я должен тебе пива за это! =)
aL3xa
2
Так разве нельзя это автоматизировать? Всегда нужно указывать ширину?
vashts85 04
12
Это работало только для меня после того, как я добавил fill = ustanovaв geom_textслое , который имеет смысл , особенно если у вас есть много горизонтальных полос (возможно , необходимый только для 3 + брусков в й) и числе разрывов должна быть одинаковым для текста, так и для баров .
Алан
3
Для многогранных и уклончивых это полезный ответ: stackoverflow.com/a/26661791/1000343
Тайлер Ринкер,
@Alan среди всех поисков, которые я делал в stackoverflow, ваш ответ был единственным, который решил мою проблему.
DR15,