Настройка текста и цветов легенды в ggplot2 - PullRequest
1 голос
/ 19 мая 2011

Я пытаюсь получить график (используя ggplot), который будет отображать geom_point и geom_line, где разные переменные отображаются разными цветами (в соответствии с scale_colour_manual(value = color), где color - это пользовательский массив цветов) в дополнение к двум горизонтальным черным линиям (geom_hline).

Моя проблема возникает, когда я пытаюсь настроить текст легенды для горизонтальных линий. Похоже, у меня может быть только одно из двух:

  1. черный цвет горизонтальной линии, но текст легенды для этой строки неправильный
  2. текст легенды для этой строки правильный, но цвет горизонтальной линии определяется вышеупомянутым scale_colour_manual цветом.

plot <- ggplot(data, aes(x = factor(Month), y = avgLoss, colour = type, order = -as.numeric(type)))
         + geom_line() + geom_point()

meanplus2sd <- mean(data$avgLoss) + 2*sd(data$avgLoss)

plot <- plot + geom_hline(aes(yintercept = meanplus2sd), colour = "black")

производит черную линию с надписью "черный" в легенде

plot <- plot + geom_hline(aes(yintercept = meanplus2sd, colour = "Mean + 2 Stdev."))

создает строку следующего цвета в моем определенном массиве scale_colour_manual, но текст легенды "Mean + 2 Stdev."

Любая помощь в получении как пользовательского цвета, так и текста легенды для горизонтальной линии в дополнение к стандартному графику geom_point + geom_line была бы превосходной. Спасибо.

Ответы [ 2 ]

1 голос
/ 19 мая 2011

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

Добавить строки в «data», по одной для каждого уровня «Month», гдезначение «avgLoss» в каждой строке равно «meanplus2sd».Возможно, вы захотите, чтобы все остальные столбцы содержали NA.Итак,

newData <- head(data,length(unique(data$Month)))
newData$Month <- unique(data$Month) 
newData$avgLoss <- rep(meanplus2sd,length(unique(data$Month)
newData$type <- rep('Mean + 2sd',length(unique(data$Month)))
#Then set all other values in newData to NA...and,
data <- rbind(data,newData)

Это должно помочь вам начать, вам просто нужно убедиться, что цвет "черный" находится в правильном положении в scale_colour_manual, что может занять некоторое время.

0 голосов
/ 19 мая 2011

Annotate может быть хорошим вариантом

x <- baseball
tmp <- subset(x, team == c("CHN","NYA"))
cols <- c("8" = "red","4" = "blue","6" = "darkgreen")
meanplus2sd <- mean(tmp$rbi) + 2*sd(tmp$rbi)

plot <- ggplot(tmp, aes(x = year, y = rbi, color = factor(team), order = -as.numeric(team))) + 
geom_line() + geom_point() + geom_hline(aes(yintercept = meanplus2sd)) + 
annotate("text",label="Mean + 2sd",x=min(tmp$year)+10, y=meanplus2sd+10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...