【问题标题】:size legend for plotly bubble map/chart绘图气泡图/图表的大小图例
【发布时间】:2018-05-03 03:42:32
【问题描述】:

这是一个情节“气泡”地图(即上面有标记的地图,其大小映射到一个变量)。但是,图例只显示颜色类别,而没有显示大小与值的关系。

library(plotly)

DF = data.frame(
  Group = c("A",  "B",  "A",  "B", "A", "C", "C"), 
  Value = c(100,  80,   90,  150, 120,  60, 110), 
  lat =  c( 40,   32,   36,   44,  31,  39,  37), 
  long = c(-90, -100, -120, -110, -90, -80,-105))


plot_geo(DF, locationmode = 'USA-states') %>%
  add_markers(y=~lat, x=~long, color=~Group, size=~Value, 
    marker=list(sizeref=0.1, sizemode="area")) %>%
  layout(geo=list(scope = 'usa'))

This question 显示了如何控制标记的大小,但没有回答如何在图例中显示这些大小。在thisthis 问题中,我们可以看到,如果每个类别只有一个与之关联的标记大小,那么图例将显示标记缩放到它们在气泡图中的大小。但这在这里没有帮助。 plotly 网站有bubble chartsbubble maps 的示例,但这些都没有大小图例。

有没有办法将标记大小的图例添加到气泡图/地图中?上面的示例使用 R api,但使用另一个 plotly api(例如 python)的答案也是可以接受的。

编辑:为什么这不是this question 的重复项

我已经在我原来的帖子中链接到这个问题,并解释了为什么它不同。但让我试着更清楚地解释一下差异,因为无论如何有人已经将它标记为可能的重复......

链接的问题与患有图例中显示的不同气泡大小的人有关发生这种情况是因为他们的数据中每个类别只有一个大小。相比之下,此示例中的每个类别都有不同大小的气泡。链接问题中的 OP 想知道如何摆脱图例中的不同大小 - not 如何将值映射到图例中的大小。链接问题中的答案提供了各种质量的解决方法来实现这一目标。但是,在这个问题中,我已经有一个图例,其中标记的大小都相同。我想要的是添加一个图例,显示一系列大小的气泡,每个气泡都标有该大小对应的值。链接帖子中没有任何内容询问或显示如何实现这一目标。

【问题讨论】:

  • 上次我尝试这个(使用 R + ggplotly)我无法让尺寸图例起作用并放弃了。实现起来可能并不容易。
  • @KevinArseneau 不,不是重复的。我什至链接到那个问题,解释为什么它不是一个重复。在链接中,OP 有一个图表,其中每个类别都有一个大小(正如我在这个问题中解释的那样)确实在图例中获得了这些单独的大小,但当类别映射到各种大小时没有帮助。
  • 如果您阅读了我链接到的问题的详细信息,您将看到您的问题的内容被直接讨论并提供了使用ggplotly 的变通解决方案。鉴于图例属性保持不变,我不确定您如何期望对您的问题有不同的答案
  • @KevinArseneau 请查看编辑 - 我试图更清楚地解释为什么这个问题不同。希望这可以为您澄清一点。干杯。

标签: python r plotly


【解决方案1】:

在看到一些关于这个问题的 cmets 表明这无法完成后,我自己又尝试了一次,这是一种非常有效的方法。

legend.sizes = seq(80, 160, 20)
ax = list(zeroline = FALSE, showline = FALSE, showticklabels = FALSE, showgrid = FALSE)
mk = list(sizeref=0.1, sizemode="area")

p.map = plot_geo(DF, locationmode = 'USA-states') %>%
  add_markers(x = ~long, y = ~lat, color = ~Group, size = ~Value, marker = mk) %>%
  layout(geo = list(scope = 'usa'))

p.legend = plot_ly() %>%
  add_markers(x = 1, y = legend.sizes, size = legend.sizes, showlegend = F, marker = mk) %>%
  layout(xaxis = ax, yaxis = list(showgrid = FALSE))

subplot(p.legend, p.map, widths = c(0.1, 0.9))

【讨论】:

  • 我喜欢这种方法,虽然它不是你传奇的一部分,但它不需要传达你所追求的东西,让你留在原生plotly
  • 是否可以将图例(A,B,C)下方的尺寸图例移动?
  • @Ben - 如果您想出办法,请在此处发布答案。许多人尝试过但都失败了(请参阅有关问题的 cmets),但这并不能证明这是不可能的。祝你好运!
  • @dww 如果你不能,那么我不会:) 将通过 inkscape 将它放在那里 :)
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2022-01-13
  • 2016-09-13
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多