如何使图例出现在情节上但不绘制相关点

Posted

技术标签:

【中文标题】如何使图例出现在情节上但不绘制相关点【英文标题】:How to make a legend appear on plotly but not plot the associated points 【发布时间】:2021-12-27 17:42:03 【问题描述】:

我有一个情节,我只想渲染图例,但没有情节点。谁能告诉我怎么做?

library(tidyverse)
library(plotly)

mtcars %>% 
  mutate(cyl = factor(cyl)) %>% 
  plot_ly() %>% 
  add_markers(x = ~mpg,
              y = ~hp,
              color = ~cyl,
              colors = c("4" = "red", "6" = "green", "8" = "blue"))

目前我有这个:

我想要的是这个:

【问题讨论】:

请查看documentation、fig.add_trace(go.Scatter( x=[1, 2, 3, 4, 5], y=[5, 4, 3, 2, 1], visible='legendonly' ))。您是否尝试将可见性设置为 legendonly?您能否在问题中说明您尝试了什么以及为什么它不起作用? 我可以将您发送给与我一起工作的数据工程师吗?如果有人成功地告诉他们我们需要闪亮,我们会很高兴! 请问这里的背景是什么?你对结果做了什么? 哈哈,我是一个闪亮的粉丝,所以总是很乐意为它做一个插件:) 特定的用例是特定于业务的,但它是一个复杂的图表,其中标记可以根据两个分类着色和形状变量。如果你没有找到一个奇怪的黑客,那么图例将显示这两个分类变量的所有组合(所以如果你有 5 X 2,那么你有 10 个图例条目)实际上我想要的只是一个有 7 个的图例条目 (5 + 2) 啊,这也可以使用legendgroup's 解决。请查看我的相关答案here 或here。 【参考方案1】:

不确定这个结果应该有什么用,但您可以像这样禁用 legendclick:

编辑:也可以不用onRender

library(plotly)
mtcars %>% 
  mutate(cyl = factor(cyl)) %>% 
  plot_ly() %>% 
  add_markers(x = ~mpg,
              y = ~hp,
              color = ~cyl,
              colors = c("4" = "red", "6" = "green", "8" = "blue"), visible='legendonly') %>%
  layout(legend=list(itemclick = FALSE, itemdoubleclick = FALSE)) 

library(htmlwidgets)
library(plotly)

js <- c(
  "function(el, x)",
  "  el.on('plotly_legendclick', function() ",
  "    return false;",
  "  );",
  "  el.on('plotly_legenddoubleclick', function() ",
  "    return false;",
  "  );",
  "")

mtcars %>% 
  mutate(cyl = factor(cyl)) %>% 
  plot_ly() %>% 
  add_markers(x = ~mpg,
              y = ~hp,
              color = ~cyl,
              colors = c("4" = "red", "6" = "green", "8" = "blue"), visible='legendonly') %>%
  onRender(js)

【讨论】:

以上是关于如何使图例出现在情节上但不绘制相关点的主要内容,如果未能解决你的问题,请参考以下文章

如何将传说保留在情节中? [复制]

绘制无边框和白色背景的图例

堆叠的水平条形图,图例在图内。我如何使这个情节更明显[重复]

避免使用 facet_wrap 从 ggplot 进行情节转换中的图例重复

如何使 UIView 不出现在背景上但仍出现在 UIImageView (子视图)上

如何使用自己想要的颜色让图例出现在我的情节中? [复制]