You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot图例调整:移除指定符号、修正样式并增加图例间距

解决方案

数据

structure(list(year = 1980:2021, AvgTMean = c(46.6861236310086, 
45.9935321876897, 48.1700038729655, 46.4810115090517, 46.4829304907586, 
46.7485468749052, 47.6219529266638, 47.2361218780086, 47.2499555211466, 
47.5220451962069, 48.5570011928017, 48.3781107312672, 46.8573046128362, 
47.176300310069, 48.4485899941034, 47.4609176108276, 46.6484865289397, 
48.1642107206379, 48.1402675745948, 46.9259296469741, 47.0971184616466, 
46.9726183841638, 47.6723684868621, 47.5039107233534, 47.1155762179138, 
46.7073537729569, 47.0220951396465, 47.7124003840862, 47.3834037927155, 
47.1793288212414, 45.2688071177586, 47.9963270432845, 47.1814417165345, 
47.868863306069, 47.5397788474655, 49.6073711623448, 48.3243434869914, 
48.3742754506034, 48.1300366010172, 48.8198359721638, 48.8188162341724, 
48.1362190050517), year.1 = 1980:2021, AvgPpt = c(7.98047681617574, 
4.49794226223406, 4.9684832619452, 5.55716999365373, 4.57494083048695, 
5.14877823483309, 4.97444435545455, 4.22068948662692, 3.60726044275288, 
2.84911801980053, 4.21517699598155, 5.46851140458677, 4.52277085448576, 
4.64293974933608, 6.15600410764903, 5.875274014911, 4.87718798058995, 
5.8443990209339, 5.32429453784799, 5.74763654079229, 4.17193446127319, 
4.76059529730215, 4.16013977314758, 4.69800474088282, 3.72061294666274, 
5.29432854004791, 3.93882676214587, 4.43336743516705, 4.64442420697922, 
5.77322014781625, 5.20579882483319, 4.61210504742011, 5.74595928751707, 
4.42505010181327, 4.9249395747262, 4.47639288282123, 4.93601457652385, 
6.44108245535473, 5.15154468243163, 6.11707801937097, 8.82894831877217, 
5.03274669845953)), class = "data.frame", row.names = c(NA, -42L
))

修改后的代码

ggplot(df, aes(x = AvgTMean, y = AvgPpt)) +
  geom_point(aes(color = "Precipitation"), size = 2, shape = 1) +
  geom_smooth(method = lm, aes(linetype = "LM"), se = TRUE, color = "red")  + 
  geom_hline(aes(yintercept = mean(AvgPpt), color = "Average Precipitation"), linetype = "dashed") +
  geom_vline(aes(xintercept = mean(AvgTMean), color = "Average Mean Temperature"), linetype = "dashed") +
  xlab("平均温度 (°F)") +
  ylab("平均降水量 (英寸)") +
  ggtitle("降水量与平均温度相关性散点图") +
  scale_colour_manual(
    values = c(
      "Average Precipitation" = "blue",
      "Average Mean Temperature" = "orange",
      "Precipitation" = "black"
    ), 
    name = "图例"
  ) +
  scale_linetype_manual(values = 2, name = NULL) +
  # 精准控制图例元素显示
  guides(
    color = guide_legend(
      override.aes = list(
        shape = c(NA, NA, 1),  # 隐藏均值线对应的散点符号
        linetype = c(2, 2, 0), # 隐藏散点对应的虚线
        alpha = 0.5
      ),
      order = 1,
      # 调整图例项尺寸,增加间距
      keyheight = unit(1.2, "lines"),
      keywidth = unit(1.5, "lines")
    ),
    linetype = guide_legend(order = 2)
  ) +
  coord_cartesian(clip = "off") +
  theme(
    axis.text = element_text(size = 12), 
    legend.text = element_text(size = 12), 
    legend.title = element_text(size = 14),
    axis.title = element_text(size = 14),
    # 增加图例内部空白
    legend.key = element_rect(size = 0.5)
  )

修改说明

  1. 移除均值线图例的散点符号:在guide_legend的override.aes参数中,给"Average Precipitation"和"Average Mean Temperature"对应的位置设置shape = NA,直接隐藏多余的散点符号。
  2. 移除散点图例的虚线:给"Precipitation"对应的位置设置linetype = 0(无线条样式),消除原本错误显示的虚线。
  3. 添加图例符号间距:通过keyheight和keywidth调整图例项的整体尺寸,配合legend.key设置,增加图例元素之间的空白。
  4. 修复虚线+散点的异常:通过override.aes分别指定每个图例项的shape和linetype,让均值线图例只显示虚线,散点图例只显示空心圆,解决元素叠加的问题。

内容的提问来源于stack exchange,提问作者Ed_Gravy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:20:27