【问题标题】:R Plotly: Change legend symbolR Plotly:更改图例符号
【发布时间】:2019-02-02 21:15:49
【问题描述】:

如何更改 R 中的默认图例符号?在下面的示例中,我希望这两个符号都是图例中的点。 “A”的图例条目应该是一个蓝色圆圈。 (默认情况下,Plotly 使用每个类别的第一个点的符号。)

library(plotly)

# generate example data
name  = rep("A", 100)
name[1:100%%6 == 0] = "B"
data = data.frame(x = 1:100, y = sin(1:100),
                  name = name,
                  symbol = c(2, rep(1, 50), 2, 2,2, 2, 2, 2, rep(1, 43)))



plot_ly(data)%>%
          add_markers(x = ~x, y = ~y, symbol = ~symbol,
                      symbols = c(27, 4),
                      mode = 'markers', split = ~name)

【问题讨论】:

  • 我不确定这是否是您想要的,但是 symbols = c("circle", "circle") 呢?
  • 要覆盖图例吗?
  • @StéphaneLaurent 我只想将 A 的图例符号更改为蓝色圆圈。情节应该保持不变。
  • @PascalIv 只是确认一下,你想要情节中的“x”而不是图例中的圆圈吗?
  • @Ameya 是的。 (请注意,在情节中同时存在:A 和 B 的“x”和“圆圈”,碰巧将“x”用于第一个图例条目,将“圆圈”用于第二个)

标签: r plotly legend symbols r-plotly


【解决方案1】:

如果我们对符号使用 2 级分类变量,我们可以尝试 symbols = I(c('27', '4')) 指定符号。

【讨论】:

    【解决方案2】:

    啊,plotly 已经选择了symbol 列的第一个条目以用于其图例。

    > head(data[data$name == 'A', ])
      x          y name symbol
    1 1  0.8414710    A      2  # The first value is 2
    2 2  0.9092974    A      1
    3 3  0.1411200    A      1
    4 4 -0.7568025    A      1
    5 5 -0.9589243    A      1
    7 7  0.6569866    A      1
    

    然而,如果是“B”, -

    > head(data[data$name == 'B', ])
        x          y name symbol
    6   6 -0.2794155    B      1  # The first value is 1
    12 12 -0.5365729    B      1
    18 18 -0.7509872    B      1
    24 24 -0.9055784    B      1
    30 30 -0.9880316    B      1
    36 36 -0.9917789    B      1
    

    如果您按照namesymbol 对数据进行排序,那么图例应该是一致的。

    library(plotly)
    
    # generate example data
    name  = rep("A", 100)
    name[1:100%%6 == 0] = "B"
    data = data.frame(x = 1:100, y = sin(1:100),
                      name = name,
                      symbol = c(2, rep(1, 50), 2, 2,2, 2, 2, 2, rep(1, 43)))
    
    data <- data[with(data, order(symbol, name)), ]
    
    plot_ly(data)%>%
      add_markers(x = ~x, y = ~y, symbol = ~symbol, symbols = c(27, 4), 
                  mode = 'markers', split = ~name)
    

    【讨论】:

      【解决方案3】:

      通过将符号和颜色参数映射到因子变量,您可以为每个符号和名称创建一条轨迹。以下代码可能会解决您的问题:

      col3 <- colorRamp(c("red", "blue"))
      p = plot_ly(data,x = ~x, y = ~y)
      add_markers(p, symbol = ~factor(symbol), 
                  color = ~factor(name), 
                  colors = col3, symbols = c(27,4))
      

      查看此链接以获取有关散点图轨迹的更多详细信息 https://plotly-book.cpsievert.me/scatter-traces.html

      【讨论】:

      • 感谢您的回答,但这并不能解决我的问题,因为您的代码生成了四个图例条目而不是两个。此外,图例条目现在是 1 A、1 B、2 A、2 B。
      猜你喜欢
      • 2021-03-20
      • 2019-01-28
      • 2016-04-25
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多