簡體   English   中英

在組合 ggplot 中刪除 geom_point 的圖例背景

[英]Remove legend background for geom_point in combined ggplot

我希望圖例只顯示Proporció sobre la despesa total的黑點,沒有紫色背景。

這是我的數據集的示例:

structure(list(decils_renda = structure(1:10, .Label = c("1r", 
"2n", "3r", "4t", "5è", "6è", "7è", "8è", "9è", "10è"), class = "factor"), 
    despesatotal = c(2681.8, 3543.7, 3960.3, 4356.8, 4767.3, 
    5229.9, 5057.8, 5799.5, 6096.8, 7228.4), despesamonetaria = c(2654, 
    3516, 3918.1, 4308.8, 4722.8, 5160.9, 5027, 5746.5, 6068.3, 
    7181.6), proporcio_despesatotal = c(18.6, 19, 18.4, 17.8, 
    17.1, 17.2, 16.6, 16, 15.2, 13.4), proporcio_despesamonetaria = c(26.7, 
    26.2, 24.2, 23.4, 21.9, 21.5, 20.9, 20.1, 19.2, 17.1), proporcio_despesatotal_ingressos = c(32.7, 
    26.1, 23.4, 20.1, 18.8, 17.8, 14.7, 15.2, 13.2, 10.4), proporcio_despesamonetaria_ingressos = c(32.3, 
    25.9, 23.2, 19.9, 18.6, 17.6, 14.6, 15.1, 13.1, 10.4)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

這是我用於圖表的代碼:

plotalimentacio_2021_decils <- ggplot(alimentacio_2021_decils) +
  geom_col(aes(fct_inorder(decils_renda), despesamonetaria, color="despesamonetaria"), fill="#9A6584", width=0.5, alpha=1) +                
  geom_point(aes(fct_inorder(decils_renda), proporcio_despesamonetaria_ingressos*100, color="Proporció sobre els ingressos anuals"), size=3) +
  scale_color_manual(name="", labels=c("Despesa monetària", "Proporció sobre els ingressos anuals (eix dret)"), values=c("#9a6584","#000000")) +
  scale_y_continuous(labels=function(x) format(x, big.mark = ".", scientific = FALSE), breaks=seq(from=0, to=8000, by=1000),
                     expand = expansion(mult = c(0, .05)), 
                     sec.axis=sec_axis(~ ./100 ,  breaks = seq(0, 100, by = 10), name = "% sobre el total d'ingressos")) +  
  geom_hline(yintercept=0, color="black")+
  labs(
    title="Despesa en alimentació per decils de renda a Espanya (2021)",
    subtitle="En euros i proporció sobre els ingressos anuals",
    x = "Decils de renda", 
    y="",
    caption="Font: Elaboració pròpia a partir de dades de l'Enquesta de pressupostos familiars del 2021, base 2016, de l'INE.") +
  theme(
    legend.position = "bottom",
    legend.justification = "left",
    legend.direction="horizontal",
    legend.margin=margin(t=-25),
    legend.text=element_text(size=12),
    legend.box.margin = margin(0,1,0.5,-1,"cm"))

在此處輸入圖像描述

問題是您正在嘗試使單個圖例同時適用於填充和顏色元素,但不想將它們組合在一起。 解決方案是使用兩個單獨的圖例,一個用於填充,一個用於顏色。

ggplot(alimentacio_2021_decils) +
# Notice I've gotten rid of color for the geom_col
  geom_col(aes(fct_inorder(decils_renda), despesamonetaria, fill = 'despesamonetaria'), width=0.5, alpha=1)+                
  geom_point(aes(fct_inorder(decils_renda), proporcio_despesamonetaria_ingressos*100, color="Proporció sobre els ingressos anuals"), size=3)+
# I've added scale_fill_manual just referring to the bar
  scale_fill_manual(name = '', labels = "Despesa monetària", values = "#9a6584") +
# and scale_color_manual is edited to just refer to the point
  scale_color_manual(name="", labels="Proporció sobre els ingressos anuals (eix dret)", values="#000000") +
  scale_y_continuous(labels=function(x) format(x, big.mark = ".", scientific = FALSE), breaks=seq(from=0, to=8000, by=1000),
                     expand = expansion(mult = c(0, .05)), 
                     sec.axis=sec_axis(~ ./100 ,  breaks = seq(0, 100, by = 10), name = "% sobre el total d'ingressos")) +  
  geom_hline(yintercept=0, color="black")+
  labs(
    title="Despesa en alimentació per decils de renda a Espanya (2021)",
    subtitle="En euros i proporció sobre els ingressos anuals",
    x = "Decils de renda", 
    y="",
    caption="Font: Elaboració pròpia a partir de dades de l'Enquesta de pressupostos familiars del 2021, base 2016, de l'INE.") +
  theme(
    legend.position = "bottom",
    legend.justification = "left",
    legend.direction="horizontal",
    legend.margin=margin(t=-25),
    legend.text=element_text(size=12),
    legend.box.margin = margin(0,1,0.5,-1,"cm"))

你給出的代碼示例導致圖例與 x 軸標題重疊,我沒有改變它,但你可以在這里看到圖例看起來是正確的

具有兩個獨立圖例的圖表,一個用於填充,一個用於顏色

解決問題的一種選擇是使用guide_legendoverride.aes參數來擺脫“黑色”類別的fill ,使用

guides(color = guide_legend(override.aes = list(fill = c("#9a6584", NA)))

此外,在下面的代碼中,我使用l.netype="blank"刪除了圖例鍵周圍的輪廓,最后通過主題選項刪除了圖例鍵背景的填充顏色。

library(ggplot2)
library(forcats)

ggplot(alimentacio_2021_decils) +
  geom_col(aes(fct_inorder(decils_renda), despesamonetaria, color = "despesamonetaria"),
    fill = "#9A6584", width = 0.5, alpha = 1
  ) +
  geom_point(aes(fct_inorder(decils_renda), proporcio_despesamonetaria_ingressos * 100,
    color = "Proporció sobre els ingressos anuals"
  ), size = 3) +
  scale_color_manual(
    name = "", labels = c("Despesa monetària", "Proporció sobre els ingressos anuals (eix dret)"),
    values = c("#9a6584", "#000000")
  ) +
  scale_y_continuous(
    labels = scales::label_number(big.mark = ".", decimal.mark = ","),
    breaks = seq(from = 0, to = 8000, by = 1000),
    expand = expansion(mult = c(0, .05)),
    sec.axis = sec_axis(~ . / 100, breaks = seq(0, 100, by = 10), name = "% sobre el total d'ingressos")
  ) +
  geom_hline(yintercept = 0, color = "black") +
  labs(
    title = "Despesa en alimentació per decils de renda a Espanya (2021)",
    subtitle = "En euros i proporció sobre els ingressos anuals",
    x = "Decils de renda",
    y = "",
    caption = "Font: Elaboració pròpia a partir de dades de l'Enquesta de pressupostos familiars del 2021, base 2016, de l'INE."
  ) +
  theme(
    legend.position = "bottom",
    legend.justification = "left",
    legend.direction = "horizontal",
    legend.key = element_rect(fill = NA),
    # legend.margin = margin(t = -25),
    legend.text = element_text(size = 12),
    # legend.box.margin = margin(0, 1, 0.5, 0, "cm")
  ) +
  guides(color = guide_legend(override.aes = list(fill = c("#9a6584", NA), linetype = "blank")))

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM