0

So I create a boxplot of data and then add a set point over that data. I want my legend to capture what the data type of the geom_points represents. Thanks!


ggplot(data = NULL) +
 geom_boxplot(data = discuss_impact_by_county,
              aes(x=reorder(State,discuss, FUN = median),y=discuss),
              outlier.shape = NA) +
 theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) + 
 labs(x = "States") +
 geom_point(data = by_state, 
            aes(x = State, y = discuss_happen_difference), 
            col = "red", 
            size = 3,
            show.legend = TRUE)
Marco Sandri
  • 23,289
  • 7
  • 54
  • 58

1 Answers1

0

If you want a legend you have to map on aesthetics. In your case map something on the color aes, i.e. move col="red" into aes() and use scale_color_manual to set the value and the legend label to be assgined to the color label "red".

As you have only one "category" of points you can simply do scale_color_manual(values = "red", label = "We are red points") to set the color and label. In case that your have multiple points with different colors it's best to make use of a named vector to assign the colors and legend labels to the right "color label"s, i.e use scale_color_manual(values = c(red = "red"), label = c(red = "We are red points")).

Using some random example data try this:

library(ggplot2)
library(dplyr)

set.seed(42)
discuss_impact_by_county <- data.frame(
  State = sample(LETTERS[1:4], 100, replace = TRUE),
  discuss = runif(100, 1, 5)
)

by_state <- discuss_impact_by_county %>% 
  group_by(State) %>% 
  summarise(discuss_happen_difference = mean(discuss))
#> `summarise()` ungrouping output (override with `.groups` argument)

ggplot(data = NULL) +
  geom_boxplot(data = discuss_impact_by_county,
               aes(x=reorder(State,discuss, FUN = median),y=discuss),
               outlier.shape = NA) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) + 
  labs(x = "States") +
  geom_point(data = by_state, 
             aes(x = State, y = discuss_happen_difference, col = "red_points"), 
             size = 3,
             show.legend = TRUE) +
  scale_color_manual(values = "red", label = "We are red points")

stefan
  • 90,330
  • 6
  • 25
  • 51