user3594490
user3594490

Reputation: 1999

How to add multiple geom_hlines with color equal to grouping variable

I've created a grouped boxplot and added three specific geom_hlines to the plot. However, I want to set the hline colors to fill=factor(Training.Location), rather than trying to match the colors manually with a color palette. Is there a way to do this?

ggplot(aes(x=factor(CumDes),y=Mn_Handle), data=NH_C) +
    geom_boxplot( aes(fill=factor(Training.Location))) +
    geom_point( aes(color=factor(Training.Location)), 
    position=position_dodge(width=0.75) ) + 
    theme(axis.ticks = element_blank(), axis.text.x = element_blank()) + 
    coord_cartesian(ylim = c(0, 2000)) + 
    geom_hline(yintercept=432, linetype="dashed", lwd=1.2) + 
    geom_hline(yintercept=583, linetype="dashed", lwd=1.2) + 
    geom_hline(yintercept=439, linetype="dashed", lwd=1.2)

Upvotes: 1

Views: 4020

Answers (2)

aosmith
aosmith

Reputation: 36076

This is the sort of thing that seems easiest with a new dataset. I'm not sure how you are calculating the values you are using for the horizontal lines, but often times I want to calculate these from the original dataset and use some sort of aggregation function/package for that.

Here is a modified example from the help page for geom_hline.

Make the dataset to give to geom_hline, including the values for the horizontal lines as well as the grouping variable.

mean_wt = data.frame(cyl = c(4, 6, 8), wt = c(2.28, 3.11, 4.00))

Then just plot with the new dataset for that layer, using whatever aesthetic you wish with the grouping variable.

ggplot(mtcars, aes(x = factor(vs), wt) ) +
    geom_boxplot(aes(fill = factor(cyl))) +
    geom_point(aes(color = factor(cyl)), position = position_dodge(.75)) +
    geom_hline(data = mean_wt, aes(yintercept = wt, color = factor(cyl)) )

enter image description here

Upvotes: 7

Eric Fail
Eric Fail

Reputation: 7928

Here's a somewhat hackish solution (I had to improvise on the data, feel free to improve)

hhh

# install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
col <- c("#CC6666", "#9999CC", "#66CC99")

 ggplot(mtcars, aes(x = factor(cyl), y=mpg)) + 
geom_boxplot(aes(fill=gear)) +
geom_point( aes(color=factor(gear)), 
position=position_dodge(width=0.75) ) + 
scale_colour_manual(values= col) + 
theme(axis.ticks = element_blank(), axis.text.x = element_blank()) + coord_cartesian(ylim = c(8, 35)) + 
geom_hline(yintercept=12, linetype="dashed", lwd=1.2, color=col[1]) + 
geom_hline(yintercept=18, linetype="dashed", lwd=1.2, color=col[2]) + 
geom_hline(yintercept=28, linetype="dashed", lwd=1.2, color=col[3])

Upvotes: 0

Related Questions