Home > front end >  Can we display two attributes in one ggplot legend?
Can we display two attributes in one ggplot legend?

Time:12-07

Reading about plots for ordinal data I found Plot

I find the legend redundant since a small frequency of 10, for instance, is always a small sqaure and a light square, and so on. Thus, I would like to create a plot with a legend like this (paint solution):

Desired plot

Code to recreate the plot

# DATA
importance <- rep(1:5, times = c(30, 42, 75, 93, 60))
often <- c(rep(1:5, times = c(15, 07, 04, 03, 01)), #n=30, importance 1
           rep(1:5, times = c(10, 14, 12, 03, 03)), #n=42, importance 2
           rep(1:5, times = c(12, 23, 20, 13, 07)), #n=75, importance 3
           rep(1:5, times = c(16, 14, 20, 30, 13)), #n=93, importance 4
           rep(1:5, times = c(12, 06, 11, 17, 14))) #n=60, importance 5
running.df <- data.frame(importance, often)
runningcounts.df <- as.data.frame(table(importance, often))

# PLOT
theme_nogrid <- function (base_size = 12, base_family = "") {
  theme_bw(base_size = base_size, base_family = base_family) % replace% 
    theme(panel.grid = element_blank())   
}

ggplot(runningcounts.df, aes(importance, often))  
  geom_point(aes(size = Freq, color = Freq, stat = "identity", position = "identity"), shape = 15)  
  scale_size_continuous(range = c(3,15))   
  scale_color_gradient(low = "white", high = "black")  
  theme_nogrid()

CodePudding user response:

You may try using guides, adding guides(color = guide_legend(), size = guide_legend()) line to your code.

ggplot(runningcounts.df, aes(importance, often))  
  geom_point(aes(size = Freq, color = Freq, stat = "identity", position = "identity"), shape = 15)  
  scale_size_continuous(range = c(3,15))   
  scale_color_gradient(low = "white", high = "black")  
  guides(color = guide_legend(), size = guide_legend())  
  theme_nogrid()

enter image description here

CodePudding user response:

If you want a quick fix, this should work

# PLOT
theme_nogrid <- function (base_size = 12, base_family = "") {
  theme_bw(base_size = base_size, base_family = base_family) % replace% 
    theme(panel.grid = element_blank())   
}

ggplot(runningcounts.df, aes(importance, often))  
  geom_point(aes(size = Freq, color = Freq, stat = "identity", position = "identity"), shape = 15)  
  scale_size_continuous(range = c(3,15))   
  scale_color_gradient(low = "white", high = "black")  
  theme_nogrid() 
  guides( colour = guide_legend()) #added guides()

enter image description here

  • Related