Граничная позиция для geom_text () - PullRequest
0 голосов
/ 29 апреля 2020

Я делаю несколько экземпляров наклонной гистограммы. Поскольку размеры счета и различия в процентах различаются, часть одной из меток (количества) в некоторых случаях выталкивается за пределы бара. Мне нужно, чтобы ярлыки были полностью внутри панели во всех случаях. Если не переставить, чтобы поместиться внутри полосы, мне нужно, чтобы надписи были центрированы как есть.

enter image description here

Код:

library(tidyverse)
library(ggplot2)

data <- tibble(type = c('Cat', 'Dog'),
               group = c('Pets', 'Pets'),
               count = c(10000, 990000),
               percent = c(1, 99))

ggplot(data, aes(x = group, y = percent, fill = type)) +
  geom_bar(stat = 'identity', 
           position = position_stack(reverse = TRUE)) +
  coord_flip() +
  geom_text(aes(label = count),
            position = position_stack(vjust = 0.5, 
                                      reverse = TRUE))

1 Ответ

0 голосов
/ 30 апреля 2020

Важно отметить, что графики в ggplot отображаются по-разному в зависимости от разрешения, ширины и высоты графического устройства. Вот почему графики выглядят немного иначе, в зависимости от компьютера, который вы используете для их построения. Если я возьму ваш график по умолчанию и сохраню другой аспект крысы ios, это станет очевидным:

  • width=3, height=5

enter image description here

  • width=7, height=5

enter image description here

Соотношение сторон и разрешение изменяют сюжет. Вы также можете убедиться в этом в R studio, просто изменив размер окна просмотра графика.

С учетом сказанного, есть несколько вариантов настройки графика, чтобы с меньшей вероятностью обрезать текст вне границ:

  • Поверните текст или поверните график обратно к горизонтальным полосам. Для длинных текстовых меток они все равно будут лучше работать с горизонтальными полосами.

  • geom_text_repel из пакета ggrepel. Прямая замена geom_text помещает ваши метки в область графика, и вы можете использовать min.segment.length=, чтобы указать минимальную длину линии, а также force= и direction=, чтобы играть с позиционированием. Опять же, работает лучше, если вы переверните график.

  • Используйте аргумент expand=, примененный к scale_y_continuous. Попробуйте добавить scale_y_continuous(expand=c(0.25,0.25)) к вашему графику, например. Обратите внимание, что, поскольку ваша система координат перевернута, вы должны указать «y», чтобы развернуть «x». Это расширяет область вокруг геомов.

  • Измените выходные данные width= и height= и разрешение при экспорте ваших графиков. Как указано выше, это простое решение.

Возможно, есть и другие предложения, но это мое.

...