rggplot2viridis

Remove edges on sthe bubbles of the bubble diagram made with `ggplot2` in `R`


I have a problem concerning the aesthetics of a graph. I would like to remove the black border of the bubbles on the graph but keep it in the legend. Is this possible?

Below are the actual graph and the code.

It can be also a white border on the graph, so as to artificially remove it.

library(ggplot2)
library(hrbrthemes)
library(viridis)
library(ggrepel) # Per evitare sovrapposizioni


# Crea il dataframe
data <- data.frame(
  Progetto = c("Progetto primo", "Progetto secondo", "Progetto terzo", "Progetto quarto", "Progetto quinto", 
               "Progetto sesto", "Progetto settimo", "Progetto ottavo", "Progetto nono", "Progetto decimo", 
               "Progetto undicesimo", "Progetto dodicesimo", "Progetto tredicesimo"),
  Impatto = c(2, 5, 3, 3, 8, 3, 5.5, 7, 4, 7, 6, 3, 7.5),
  `Difficoltà tecnica` = c(7.5, 3, 5, 8, 8, 5, 5, 8, 8, 6, 8, 10, 10),
  Durata = c(6.00, 3.00, 6.00, 6.00, 12.00, 6.00, 3.00, 6.00, 12.00, 12.00, 18.00, 24.00, 36.00)
)

# Visualizza il dataframe
print(data)


attach(data)



# Creazione del grafico a bolle
ggplot(data, aes(
  x = Impatto, 
  y = `Difficoltà.tecnica`, 
  size = Durata, # Rimosse le virgolette
  fill = Progetto, 
  label = Progetto
)) +
  geom_point(alpha = 0.7, shape = 21, color = "black") + # Sfere con bordi neri
  geom_text_repel(
    size = 3.5, 
    show.legend = FALSE, 
    box.padding = 0.7, # Spaziatura attorno all'etichetta
    point.padding = 0.7, # Spaziatura tra etichetta e punto
    max.overlaps = Inf # Evita di eliminare etichette
  ) +
  scale_size(range = c(3, 10), name = "Durata (Mesi)") + # Dimensioni delle sfere
  scale_fill_viridis(discrete = TRUE, option = "A", guide = FALSE) + # Palette Viridis senza legenda
  labs(
    title = "Diagramma a Bolle con Viridis",
    x = "Impatto",
    y = "Difficoltà Tecnica"
  ) +
  expand_limits(x = c(0, 11), y = c(4, 11)) + # Estendi i limiti degli assi per evitare tagli
  theme_ipsum() + # Tema simile al tuo esempio
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12)
  )

enter image description here


Solution

  • You can override an aesthetic in the legend. Here's a simple example with mtcars where I make the color match the fill, but override the color to be black in the legend:

    ggplot(mtcars, aes(wt, mpg, fill = factor(cyl))) +
      geom_point(aes(color = factor(cyl)), shape = 21) +
      guides(fill = guide_legend(override.aes = list(color = "black")))
    

    In your case, you have a size legend, so guides(size = guide_legend(override.aes = list(color = "black"))) should work.

    enter image description here