I have some data that I am using to plot a histogram. I also have two sets of thresholds that have some significance.
I am able to plot the histogram and the vlines with the appropriate styles. However, I cannot get my vlines to show up in the legend. I believe that something like this should work, however the legend items don't ever display.
df <- data.frame(val=rnorm(300, 75, 10))
cuts1 <- c(43, 70, 90)
cuts2 <- c(46, 79, 86)
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(xintercept=cuts1,
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(xintercept=cuts2,
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
Alternatively, if I construct a data.frame for my cuts and do an aesthetic mapping, I can get my vlines to show up in the legend. Unfortunately, the legend gives me two instances of the different line types superimposed on each other:
cuts1 <- data.frame(Thresholds="Thresholds A", vals=c(43, 70, 90))
cuts2 <- data.frame(Thresholds="Thresholds B", vals=cuts2 <- c(46, 79, 86))
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(data=cuts1, aes(xintercept=vals, shape=Thresholds),
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(data=cuts2, aes(xintercept=vals, shape=Thresholds),
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
So, in the end, what I'm looking for, is the most straightforward way to manually add two sets of lines to a plot, and then have them appear correctly in the legend.
You can quickly add vertical lines to ggplot2 plots using the geom_vline () function, which uses the following syntax: xintercept: Location to add line on the x-intercept. This can be one value or multiple values.
Often you may want to add a manual legend to a plot in ggplot2 with custom colors, labels, title, etc. Fortunately this is simple to do using the scale_color_manual () function and the following example shows how to do so.
So, to add legends we need to distribute the lines into multiple groups on the basis of coloring. The key idea is to differentiate the lines by assigning different colors to each line and make them into separate groups.
There is no direct way in R to add legends in case of multiple lines like in Excel and other scripting languages. So, to add legends we need to distribute the lines into multiple groups on the basis of coloring.
The trick is to put the threshold data all in the same data frame, and then map aesthetics, rather than set them:
cuts <- rbind(cuts1,cuts2)
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(data=cuts,
aes(xintercept=vals,
linetype=Thresholds,
colour = Thresholds),
show_guide = TRUE)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With