У меня есть фрейм данных (t1), и я хочу проиллюстрировать доли компаний в зависимости от их размера. Я добавил фиктивную переменную, чтобы сделать заполненный штриховой график, а не 3:

t1$row <- 1

По размеру компании делятся на средние, малые и микро:

f_size <- factor(t1$size,
               ordered = TRUE,
               levels = c("medium", "small", "micro"))

Сюжет построен с помощью Economic_theme:

ggplot(t1, aes(x = "Size", y = prop.table(row), fill = f_size)) +
geom_col() +
geom_text(aes(label = as.numeric(f_size)),
position = position_stack(vjust = 0.5)) +
theme_economist(base_size = 14) +
scale_fill_economist() +
theme(legend.position = "right", 
    legend.title = element_blank()) +
theme(axis.title.y = element_text(margin = margin(r = 20))) +
ylab("Percentage") +
xlab(NULL)

enter image description here

Как я могу изменить свой код, чтобы получить долю для среднего, малого и микро в середине трех заполненных частей на штриховой диаграмме?

Заранее спасибо!

0
dholzer 12 Дек 2019 в 18:06

1 ответ

Лучший ответ

Ваш вопрос мне не совсем понятен, и я предлагаю вам перефразировать его для ясности. Но я считаю, что вы пытаетесь добиться точного выравнивания аннотаций по оси Y. Для этого предварительно рассчитайте метки, а затем используйте annotate


library(data.table)
library(ggplot2)

set.seed(3432)
df <- data.table(
  cat= sample(LETTERS[1:3], 1000, replace = TRUE)
  , x= rpois(1000, lambda = 5)
)

tmp <- df[, .(pct= sum(x) / sum(df[,x])), cat][, cumsum := cumsum(pct)]
ggplot(tmp, aes(x= 'size', y= pct, fill= cat)) + geom_bar(stat='identity') +
  annotate('text', y= tmp[,cumsum] - 0.15, x= 1, label= as.character(tmp[,pct]))

enter image description here

Но графически это плохое решение. Гистограммы с накоплением по определению составляют 100%. Вместо того, чтобы маркировать компоненты текстом, просто позвольте графику сделать это за вас с помощью меток осей:

ggplot(tmp, aes(x= cat, y= pct, fill= cat)) + geom_bar(stat='identity') + coord_flip() +
  scale_y_continuous(breaks= seq(0,1,.05))

enter image description here

0
Alex W 12 Дек 2019 в 18:27