Как вручную изменить метки клавиш в легенде в ggplot2
Я готовлю сюжет для публикации. Я создал график в виде штабелированных ящиков, чтобы показать частоту пациентов в каждой группе, которые были сложным накоплением серонегативных средств против нет. В легенде используются метки из фрейма данных, которые подходят для нас, которые работают над проектом, но не для публикации. Я хочу изменить имена на что-то более понятное читателю.
Так, например, запустите следующий script
grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
value <- runif(n=80, min=10, max=150)
outcome <- cut(value,2)
data <- data.frame(grp,value,outcome)
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group")
+ylab("number of subjects") + labs(fill="Serologic response")
Этот код создает ключевые метки "(10.4,80]" и "(80,150]", которые не подходят для публикации. Вместо этого я хотел бы получить "двойной отрицательный" и "положительный для a и/или b".
Думаю, я мог бы вернуться к фреймворку данных и преобразовать его, чтобы получить новую переменную с правильной маркировкой. Или я мог бы просто переклассировать свой фактор? Тем не менее, я бы предпочел сделать это во время заговора.
Ответы
Ответ 1
Стандартный способ - использовать функции масштабирования для изменения отображаемых меток для групп. Вы можете заменить вызов ggplot
на
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") +
ylab("number of subjects") +
scale_fill_discrete("Serologic response",
breaks=c("(10.1,79.9]","(79.9,150]"),
labels=c("double negative", "positive for a and/or b"))
Обратите внимание, что название шкалы было включено в вызов scale_fill_discrete
. Вы можете сделать это с помощью осей, если вам нравится
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +
scale_x_discrete("group") +
scale_y_continuous("number of subjects") +
scale_fill_discrete("Serologic response",
breaks=c("(10.1,79.9]","(79.9,150]"),
labels=c("double negative", "positive for a and/or b"))
Ответ 2
Я нашел гибридный способ сделать это. Это делает замену фактора, но мне не нужно делать это в кадре данных. Вместо этого я просто делаю это в команде ggplot.
ggplot(data, aes(grp, fill=factor(outcome,labels=c("low","high")))) +
geom_bar() +xlab("group") +ylab("number of subjects") +
labs(fill="Serologic response")
Есть ли другие способы?