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

R语言Plotly世界地图:颜色条存在时根砧数量图例不显示求助

解决方案:Plotly地图同时显示颜色条和点大小图例

问题核心在于:Plotly中地理热力图(choropleth)的颜色条会占用图例空间,且散点的size属性不会自动生成图例,需要手动配置。以下是调整后的代码:

首先清理数据(移除根砧数量为NA的行,避免无效点):

# 清理散点数据集,移除NA值
duse_clean <- duse_no_dupplicats[!is.na(duse_no_dupplicats$dotsize_rootstock), ]

然后构建图形:

fig_jittered <- plot_geo() %>%
  layout(
    geo = list(
      showframe = TRUE,
      showcoastlines = TRUE,
      showland = TRUE,
      landcolor = toRGB("white"),
      countrycolor = toRGB("darkgrey"),
      coastlinecolor = toRGB("black"),
      coastlinewidth = 0.5,
      lataxis = list(
        range = c(-55, 80),
        showgrid = FALSE
      ),
      lonaxis = list(
        range = c(-130, 160),
        showgrid = FALSE
      )
    )
  ) %>%
  # 添加国家论文数热力图
  add_trace(
    data = occurence,
    z = ~count, color = ~count, colors = 'GnBu',
    text = ~COUNTRY, locations = ~code,
    marker = list(
      line = list(width = 0.5, color = "black")
    ),
    colorbar = list(title = "Number of papers published in each country", x = 1, y = 0.92),
    showlegend = FALSE  # 隐藏该图层的图例,只保留颜色条
  ) %>%
  # 添加根砧数散点(不显示图例)
  add_trace(
    data = duse_clean,
    type = "scattergeo",
    lat = ~lat_jittered, 
    lon = ~lon_jittered,
    text = ~paste("Title: ", title, "<br>Number of Rootstocks: ", n_rootstock),
    mode = "markers",
    marker = list(
      size = ~dotsize_rootstock,
      symbol = "circle",
      color = "lightgrey",
      line = list(width = 1.5, color = "black")
    ),
    showlegend = FALSE  # 主散点图层不生成图例,用手动添加的参考点替代
  ) %>%
  # 手动添加根砧数大小图例(坐标设为地图外,不显示在地图上)
  add_trace(
    data = data.frame(
      rootstock_count = c(1, 5, 10, 15),
      dot_size = c(0.75, 3.75, 7.5, 11.25),
      lat = 999, lon = 999  # 超出地图范围,不显示
    ),
    type = "scattergeo",
    lat = ~lat, lon = ~lon,
    mode = "markers",
    marker = list(
      size = ~dot_size,
      color = "lightgrey",
      line = list(width = 1.5, color = "black")
    ),
    name = ~paste(rootstock_count, "Rootstocks"),
    hoverinfo = "none"  # 关闭悬停信息
  ) %>%
  layout(
    title = "With jittered locations",
    legend = list(
      x = 0.05,
      y = 0.95,
      bgcolor = "rgba(255, 255, 255, 0.7)",
      bordercolor = "black",
      borderwidth = 1,
      title = list(text = "Number of Rootstocks")
    )
  )

fig_jittered

关键调整说明:

  1. 热力图层隐藏图例:给第一个add_trace添加showlegend = FALSE,避免热力图的图例与颜色条冲突,同时保留颜色条单独显示。
  2. 主散点图层隐藏图例:散点的size属性不会自动生成图例,因此主散点图层不显示图例,改用手动添加的参考点生成图例。
  3. 手动创建大小图例:添加一个包含不同根砧数量对应点大小的参考图层,将坐标设为地图范围外(lat=999, lon=999),这样这些点不会出现在地图上,但会生成对应的图例条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:39:50