代码之家  ›  专栏  ›  技术社区  ›  Jorge

在ggplot/plotly图例中显示布尔值,而不是数字

  •  0
  • Jorge  · 技术社区  · 6 年前

    我正在创建一个闪亮的应用程序,它显示了用ggplot创建的火山图。为了增加用户交互,我开始尝试plotly。原始ggplot由另一个包提供,因此我使用 ggplotly 将此绘图转换为 plotly 。但是,我注意到,在绘图图例中,绘图会将布尔值(TRUE,FALSE)更改为数值(1,0)。

    plotly必须做什么才能像ggplot那样在图例中显示布尔值?

    到目前为止,我所做的研究只涉及传说的风格,但我还没有找到这个特定问题的答案。

    最小示例

    使用以下数据集,绘制 b 在x轴和 -log10(qval) 在y轴上,并按 significant

            target_id          qval             b significant
    1     AT2G33830.2 1.703189e-167  2.256506e+00        TRUE
    2     AT2G35810.2 4.202545e-107 -1.667441e+00        TRUE
    3     AT2G23820.1  1.413239e-59 -6.503380e+00        TRUE
    4     AT2G33830.1  1.269998e-48  2.124706e+00        TRUE
    5     AT2G25964.1  2.555293e-32 -1.152527e+00        TRUE
    6     AT2G26740.1  1.106960e-30  3.234900e+00        TRUE
    28246 AT1G65040.6  9.998811e-01  5.752283e-05       FALSE
    28247 AT1G73430.2  9.998811e-01  8.065345e-05       FALSE
    28248 AT2G47020.3  9.998811e-01  7.621082e-05       FALSE
    28249 AT3G62840.1  9.998811e-01  1.335211e-05       FALSE
    28250 AT5G23090.3  9.998811e-01  1.447117e-04       FALSE
    28251 AT5G03830.2            NA -1.856909e-01          NA
    

    R代码:

    p <- ggplot(sample, aes(b, -log10(qval)))
    p <- p + geom_point(aes(colour = significant))
    p
    

    显示器

    enter image description here

    但当我使用 ggplotly(p) 将显示以下内容 enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   mlegge    6 年前

    最简单的方法是将该列转换为文本列,然后plotly将不会触及它。如果不希望对数据本身执行此操作,可以在plot对象中对其进行修改:

    p <- ggplot(sample, aes(b, -log10(qval)))
    p <- p + geom_point(aes(colour = significant))
    
    p$data$significant <- as.character(p$data$significant)
    
    ggplotly(p)
    

    enter image description here

    升级ggplot2

    如果升级 ggplot2 通过以下方式将版本转换为GitHub上的版本: devtools::install_github('hadley/ggplot2') :

    ggplot2     * 2.2.1.9000 2018-05-02 Github (hadley/ggplot2@4635bbb)
    plotly      * 4.7.1      2017-07-29 CRAN (R 3.4.3)    
    

    那么就没有问题了,正如@Maurits Evers在下面描述的那样。

    sample <- read.table(text = "target_id,qval,b,significant
    AT2G33830.2,1.703189e-167,2.256506e+00,TRUE
    AT2G35810.2,4.202545e-107,-1.667441e+00,TRUE
    AT2G23820.1,1.413239e-59,-6.503380e+00,TRUE
    AT2G33830.1,1.269998e-48,2.124706e+00,TRUE
    AT2G25964.1,2.555293e-32,-1.152527e+00,TRUE
    AT2G26740.1,1.106960e-30,3.234900e+00,TRUE
    AT1G65040.6,9.998811e-01,5.752283e-05,FALSE
    AT1G73430.2,9.998811e-01,8.065345e-05,FALSE
    AT2G47020.3,9.998811e-01,7.621082e-05,FALSE
    AT3G62840.1,9.998811e-01,1.335211e-05,FALSE
    AT5G23090.3,9.998811e-01,1.447117e-04,FALSE
    AT5G03830.2,NA,-1.856909e-01,NA", sep = ",", header = TRUE)
    library("plotly")
    
    p <- ggplot(sample, aes(b, -log10(qval)))
    p <- p + geom_point(aes(colour = significant))
    ggplotly(p)
    

    enter image description here

        2
  •  0
  •   Maurits Evers    6 年前

    我无法在上复制您的问题 plotly_4.7.1 :

    # Sample data
    df <- read.table(text  =
        "        target_id          qval             b significant
    1     AT2G33830.2 1.703189e-167  2.256506e+00        TRUE
    2     AT2G35810.2 4.202545e-107 -1.667441e+00        TRUE
    3     AT2G23820.1  1.413239e-59 -6.503380e+00        TRUE
    4     AT2G33830.1  1.269998e-48  2.124706e+00        TRUE
    5     AT2G25964.1  2.555293e-32 -1.152527e+00        TRUE
    6     AT2G26740.1  1.106960e-30  3.234900e+00        TRUE
    28246 AT1G65040.6  9.998811e-01  5.752283e-05       FALSE
    28247 AT1G73430.2  9.998811e-01  8.065345e-05       FALSE
    28248 AT2G47020.3  9.998811e-01  7.621082e-05       FALSE
    28249 AT3G62840.1  9.998811e-01  1.335211e-05       FALSE
    28250 AT5G23090.3  9.998811e-01  1.447117e-04       FALSE
    28251 AT5G03830.2            NA -1.856909e-01          NA", header = T, row.names = 1)
    
    # Plot
    p <- ggplot(df, aes(b, -log10(qval)))
    p <- p + geom_point(aes(colour = significant))
    ggplotly(p);
    

    enter image description here