Розташуйте geom_text на ухиленому графіку


96

Я намагався зробити заголовок зрозумілим, але тут - дані спочатку:

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?


Yepp ... Я повинен був опублікувати цей у списку розсилки ggplot2. Я не хочу робити перехресні публікації, тому я одягну шапку терпіння і почекаю, поки @hadley щось придумає! =)
aL3xa

Я був неправий. І мені, мабуть, потрібно більше ознайомитися з пакетом ggplot.
Джоріс Мейс,

Відповіді:


154

Це те, що ти хочеш?

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

12
Це спрацювало у мене лише після того, як я додав fill = ustanovaу geom_textшар, що має сенс, особливо коли у вас багато горизонтальних смуг (можливо, потрібно лише для 3+ смужок на х), а кількість розривів має бути однаковою для тексту, як для смуг .
Алан

3
Для горіння і ухилився це корисний відповідь: stackoverflow.com/a/26661791/1000343
Тайлер Рінкер

@Alan серед усіх пошукових запитів, які я робив у stackoverflow, ваша відповідь була єдиною, яка вирішила мою проблему.
Ga13
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.