在 ggplot/plotly 图例中显示布尔值而不是数字
Display boolean value in ggplot/plotly legend instead of number
我正在创建一个闪亮的应用程序,它显示用 ggplot 创建的火山图。为了增加用户交互性,我开始尝试 plotly。原来的ggplot是由另一个包提供的,所以我使用ggplotly
将这个图转换为plotly
。这是有效的,但是,我注意到在情节的图例中将布尔值 (TRUE, FALSE) 更改为数值 (1, 0)。
我必须怎么做才能像 ggplot 一样在图例中显示布尔值?
到目前为止我所做的研究只涵盖了传说的风格,但我还没有找到这个特定问题的答案。
最小示例
使用以下数据集,在 x 轴上绘制 b
,在 y 轴上绘制 -log10(qval)
,并按 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
显示
但是当我使用ggplotly(p)
时显示如下
最简单的方法就是将该列转换为文本列——然后 plotly 就不会触及它。如果您不想对数据本身这样做,您可以在绘图对象中修改它:
p <- ggplot(sample, aes(b, -log10(qval)))
p <- p + geom_point(aes(colour = significant))
p$data$significant <- as.character(p$data$significant)
ggplotly(p)
正在升级 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)
我无法在 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);
我正在创建一个闪亮的应用程序,它显示用 ggplot 创建的火山图。为了增加用户交互性,我开始尝试 plotly。原来的ggplot是由另一个包提供的,所以我使用ggplotly
将这个图转换为plotly
。这是有效的,但是,我注意到在情节的图例中将布尔值 (TRUE, FALSE) 更改为数值 (1, 0)。
我必须怎么做才能像 ggplot 一样在图例中显示布尔值?
到目前为止我所做的研究只涵盖了传说的风格,但我还没有找到这个特定问题的答案。
最小示例
使用以下数据集,在 x 轴上绘制 b
,在 y 轴上绘制 -log10(qval)
,并按 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
显示
但是当我使用ggplotly(p)
时显示如下
最简单的方法就是将该列转换为文本列——然后 plotly 就不会触及它。如果您不想对数据本身这样做,您可以在绘图对象中修改它:
p <- ggplot(sample, aes(b, -log10(qval)))
p <- p + geom_point(aes(colour = significant))
p$data$significant <- as.character(p$data$significant)
ggplotly(p)
正在升级 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)
我无法在 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);