Как вручную изменить метки клавиш в легенде в ggplot2 - PullRequest
37 голосов
/ 06 сентября 2011

Я готовлю сюжет для публикации.Я создал диаграмму с накоплением, чтобы показать частоту пациентов в каждой группе, у которых было некоторое сложное накопление серонегативных, а не нет.Легенда использует метки из фрейма данных, которые подходят для нас, которые работают над проектом, но не для публикации.Я хочу изменить имена на что-то более быстрое, понятное читателю.

Так, например, запустите следующий скрипт

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".

Я думаю, я мог бы вернуться к кадру данных и преобразовать, чтобы получить новую переменную с правильной маркировкой. Или я мог бы простоRebelbel my factor ? Однако я бы предпочел сделать это во время построения графика.

Ответы [ 2 ]

38 голосов
/ 06 сентября 2011

Стандартным способом является использование функций масштабирования для изменения отображаемых меток для групп.Вы можете заменить ваш 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"))
24 голосов
/ 06 сентября 2011

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

ggplot(data, aes(grp, fill=factor(outcome,labels=c("low","high")))) + 
  geom_bar() +xlab("group") +ylab("number of subjects") +
   labs(fill="Serologic response")

Есть ли другие способы?

...