Adding a Legend to an Existing ggplot

You can do something like this example, and following the same logic you can even include the shape in your legend.

library(ggplot2)
df <- data.frame(
    Price = c(2.5, 4, 2.5, 2.71, 1.89, 2, 2.62, 2.89, 1.98, 1.72),
    Price.A = c(2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3, 2.3),
    Price.B = c(2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1),
    Price.C = c(1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25),
    Product.Code = as.factor(c("F2162", "F2162", "F2162", "F2162", "F2162",
                               "F2162", "F2162", "F2162", "F2162", "F2162")),
    Product.Name = as.factor(c("blah", "blah", "blah", "blah", "blah", "blah",
                               "blah", "blah", "blah", "blah"))
)

ggplot(df, aes(x = "", y = Price)) + 
    geom_boxplot(fill = 'mistyrose') +
    stat_summary(aes(color = "red"), fun.y=mean, geom = "point", shape = 20, size = 7, fill = "red") +
    geom_point(position = 'jitter') + 
    coord_flip() +
    labs(title = df$Product.Name,
         subtitle = df$Product.Code,
         x = "",
         color = "Legend:") +
    geom_point(data = df, mapping=aes(x = "", y = Price.A, pch = 24, color = "blue"),  
               size = 3, fill = "blue") +
    geom_point(data = df, mapping=aes(x = "", y = Price.B, pch = 22, color = "green"),  
               size = 3, fill = "green") +
    geom_point(data = df, mapping=aes(x = "", y = Price.C, pch = 8, color = "purple"),  
               size = 3, fill = "purple") +
    scale_color_manual(values = c("blue", "green", "purple", "red"),
                       labels = c("Price.A", "Price.B", "Price.C", "Mean")) +
    scale_shape_identity()

Created on 2019-02-20 by the reprex package (v0.2.1)