我试图得到一个情节(使用ggplot),将绘制geom_point
和geom_line
,其中不同的变量以不同的颜色绘制(根据scale_colour_manual(value = color)
color
除了两条水平黑线(geom_hline
)之外,它是一个自定义颜色数组。
当我尝试获取自定义水平线的图例文字时,我的麻烦就出现了。看来我只能有两个中的一个:
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
绘图外,任何帮助获取水平线的自定义颜色和图例文本都非常有用。感谢。
答案 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)