#r #ggplot2
#r #ggplot2
Вопрос:
Я пытаюсь составить ответы на серию вопросов типа Likert с помощью ggplot(). Я рассчитал пропорции для каждого ответа («Полностью согласен», «Согласен» и т. Д.) На Каждый вопрос, Используя dplyr, И теперь хочу отобразить пропорции в виде столбчатой диаграммы (по одному столбцу на вопрос). Приведенный ниже код дает представление о том, что у меня есть на данный момент.
library(ggplot2)
dat <- data.frame(Question = "Q1",
Response = LETTERS[1:5],
freq = c(.01, .03, .11, .35, .5),
offset = c(.5, .25, 0, 0, 0))
ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response))
geom_col()
geom_label(position = position_stack(vjust = 0.5))
Мне нужно включить метки для каждого ответа, показывающие пропорцию; моя проблема возникает из-за того, что очень немногие респонденты не согласны / категорически не согласны, что означает, что столбцы для этих ответов слишком малы, чтобы содержать метки (см. A и B в примере), и они перекрываются.
Я хочу смещать метки для конкретных ответов на фиксированную величину, чтобы они не перекрывались. Интуитивно я надеялся, что что-то подобное сработает:
ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response))
geom_col()
geom_label(position = position_stack(vjust = 0.5), nudge_x = offset)
Но это возвращает «Ошибка: вы должны указать либо position
или nudge_x
/ nudge_y
«.
Я пытался использовать vjust aesthetic, но это недостаточно сдвигает метки, чтобы решить проблему.
Есть предложения о том, как переместить geom_labels с помощью эстетики? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация!
Ответ №1:
1. «Ошибка: необходимо указать либо позицию, либо nudge_x / nudge_y».
Ошибка довольно понятна, вы не можете использовать nudge_x
ее в сочетании ни с position_stack
тем, ни с другим, поскольку оба являются параметрами для одного и того же position
параметра:
if (!missing(nudge_x) || !missing(nudge_y)) {
if (!missing(position)) {
stop("You must specify either `position` or `nudge_x`/`nudge_y`.", call. = FALSE)
}
position <- position_nudge(nudge_x, nudge_y)
}
2. Есть предложения о том, как переместить geom_labels с помощью эстетики?
dat <- data.frame(Question = "Q1",
Response = LETTERS[1:5],
freq = c(.01, .03, .11, .35, .5),
offset = c(.03, 0, 0, 0, 0))
ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response))
geom_col()
geom_label(aes(y = freq offset), position = position_stack(vjust = 0.5))
Вы можете изменить эстетику, вызвав aes
снова в geom_label
вызове, здесь я добавил offset
к исходной частоте (обратите внимание, что я также изменил значения смещения в вашем фрейме данных для создания лучшего графика):