在ggplot2中自定义图例文本和颜色

时间:2011-05-18 20:16:29

标签: r ggplot2

我试图得到一个情节(使用ggplot),将绘制geom_pointgeom_line,其中不同的变量以不同的颜色绘制(根据scale_colour_manual(value = color) color除了两条水平黑线(geom_hline)之外,它是一个自定义颜色数组。

当我尝试获取自定义水平线的图例文字时,我的麻烦就出现了。看来我只能有两个中的一个:

  1. 水平线的颜色为黑色,但此行的图例文字不正确
  2. 此行的图例文字正确,但水平线的颜色由上述scale_colour_manual颜色决定。
  3. 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 个答案:

答案 0 :(得分:1)

获得所需内容的一种方法是在原始数据框中包含水平黑线的数据。您的示例不完全可重现,因此这可能不是您想要的代码,但这是一般的想法:

向'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中处于正确的位置,这可能需要一些摆弄。

答案 1 :(得分:0)

注释可能是一个不错的选择

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)