【问题标题】:制作许多图时,R 中“情节”图中组的颜色保持一致
【发布时间】:2022-01-21 03:16:22
【问题描述】:

我有以下数据:

df1 <- data.frame(col1 = rep(LETTERS[1:3], each = 4), col2 = rnorm(12), col3 = runif(12), col4 = rep(c("Fred", "Bob"), each = 6))
df1_list <- split(df1, df1$col1)

我正在尝试为每个列表元素制作一个单独的图并将它们排列在同一个图中:

lapply(df1_list, function (arg1) {
  plotly::plot_ly(arg1, x = ~col2, y = ~col3, color = ~col4) %>%
    layout(showlegend = T)
}) %>%
  subplot()

问题在于每个绘图的颜色不一致。我希望代表Fred 的点始终为相同颜色,代表Bob 的点也应如此。

有没有办法确保各组在所有这些图中获得相同的颜色?

谢谢!

【问题讨论】:

    标签: r plotly


    【解决方案1】:

    一种选择是使用命名颜色向量,它为每个名称分配一种颜色,如下所示:

    set.seed(123)
    
    df1 <- data.frame(col1 = rep(LETTERS[1:3], each = 4), 
                      col2 = rnorm(12), 
                      col3 = runif(12), 
                      col4 = rep(c("Fred", "Bob"), each = 6))
    df1_list <- split(df1, df1$col1)
    
    colors <- RColorBrewer::brewer.pal(3, "Set2")[c(1, 3)]
    names(colors) <- c("Fred", "Bob")
    
    library(plotly)
    
    lapply(df1_list, function (arg1) {
      plotly::plot_ly(arg1, x = ~col2, y = ~col3, color = ~col4, colors = colors) %>%
        layout(showlegend = T)
    }) %>%
      subplot()
    

    【讨论】:

    • 非常感谢。如果我只希望“Fred”和“Bob”在图例中出现一次怎么办?
    • 嗯。实现这一目标的一般方法是通过plotly(..., legendgroup = ~col4),然后为所有人设置showlegend=FALSE,期望其中一个情节。参见例如在plotly.com/r/legend 末尾但是,在您的情况下,这不起作用。我只能猜测这与并非所有组都存在于每个子数据集中的事实有关。所以恐怕目前我无法帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多