【问题标题】:Wrong colors for Venn diagram when the area of one circle is 0当一个圆的面积为 0 时,维恩图的颜色错误
【发布时间】:2020-10-06 12:41:58
【问题描述】:

为什么当一个圆的面积为 0 ("A" = 0) 与如果它是 0.1 ("A" = 0.1) 相比颜色会发生变化 --> 比较示例 1 和 2。同样如果 A 和 B 是0,圆圈是黑色而不是绿色(参见示例 3)..

library(eulerr)

# example 1
fit <- euler(c("A" = 0.1, "B" =  10, "A&B" = 5))
p1 <- plot(fit,
          fills = list(fill = c("black", "blue", "green")),
          labels = F)
p1

# example 2
fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
p2 <- plot(fit,
          fills = list(fill = c("black", "blue", "green")),
          labels = F)
p2 

# example 3
fit <- euler(c("A" = 0, "B" =  0, "A&B" = 5))
p3 <- plot(fit,
           fills = list(fill = c("black", "blue", "green")),
           labels = F)
p3

编辑:

我在这里找到了解决方法(见下文)。但是颜色的顺序似乎很奇怪。 A 应该是黑色,B --> 蓝色和 A&B --> 绿色。如果没有是 0,这是正确的顺序 --> c("black", "blue", "green")。但是如果 A 或 B 为 0,那么顺序是不同的,基本上就是它们在图中从左到右的显示方式。奇怪....

combo <- c(A=1, B = 10, "A&B" = 1)
fit <- euler(combo)



p <- plot(fit,
          fills = list(fill = 
                         if (combo["A"] == 0) {
                           c("green", "blue")
                           
                         } else if (combo["B"] == 0)  {
                           c("black", "green")
                         } else {
                           c("black", "blue", "green")
                         }
          ),
          labels = F)

p

【问题讨论】:

    标签: r venn-diagram eulerr


    【解决方案1】:

    编辑:重新阅读您的帖子,eulerr 工作正常。

    • p1 - A 为黑色,B 为蓝色,AB 重叠为绿色
    • p2 - A 是黑色,B 是蓝色,没有绿色,因为 A 完全在 B 内部,所以它只是黑色
    • p3 - A 是黑色,B 是蓝色,但由于 A 和 B 完全重叠,A 完全在 B 之上,所以它是全黑的。

    也许使用透明度,如下:

    fit <- euler(c("A" = 0, "B" =  0, "A&B" = 5))
    p3 <- plot(fit, fills = list(fill = c("black", "blue", "green"), alpha = 0.4),
               legend = list(side = "right"))
    p3
    


    原始答案,仍然与理解重叠颜色相关......

    颜色的数量应该与集合的数量相匹配,在这种情况下我们只有 2 个集合:A 和 B,所以我们只需要 2 个颜色,重叠颜色是由 “混合” 重叠集合颜色生成的,见:

    # R version 4.0.2
    # eulerr_6.1.0
    library(eulerr) 
    
    fit <- euler(c("A" = 1, "B" =  10, "A&B" = 5))
    plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))
    

    fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
    plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))
    

    【讨论】:

      【解决方案2】:

      颜色是按顺序使用的。如果A=0A 没有可填充的内容,因此B 的区域用第一种颜色(黑色)填充,A&amp;B 的区域用第二种颜色(blue)填充。在第三个示例中,AB 都没有填充,因此 A&amp;B 被第一种颜色填充。

      如果您的值为 0,最简单的解决方案就是从向量中删除一种(或多种)颜色。例如。

      # example 2
      fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
      p2 <- plot(fit,
                fills = list(fill = c("blue", "green")),
                labels = F)
      

      【讨论】:

      • 嗯好的,谢谢。因为我需要运行数百个维恩图,所以这不是一个选择。然后必须尝试找到另一个解决方案..
      • 在 ggplot2 中,您可以使用命名向量作为调色板来指定特定组的填充,但我找不到在这里工作的类似方法
      • 我在上面编辑了我的初始示例。不知何故,它不只是替换第一种颜色...
      • 谢谢。但我真的不同意你的看法。 :) 我的意思是,您的示例中的颜色基本上只有橙色(如果 A=0.000001)并且一旦 A 为 0,它就会切换为红色。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 2020-12-29
      • 2012-02-01
      • 1970-01-01
      相关资源
      最近更新 更多