Вывести логическое значение в ggplot / plotly legend вместо числа - PullRequest
0 голосов
/ 02 мая 2018

Я создаю блестящее приложение, которое отображает сюжет вулкана, созданный с помощью ggplot. Для большей интерактивности я начал экспериментировать с сюжетом. Исходный ggplot предоставляется другим пакетом, поэтому я использую ggplotly для преобразования этого графика в plotly. Это работает, однако, я заметил, что график изменяет логические значения (ИСТИНА, ЛОЖЬ) на числовые значения (1, 0) в легенде графика.

Что я должен сделать для плотного отображения логических значений в легенде, как это делает 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 ]

0 голосов
/ 02 мая 2018

Я не могу воспроизвести вашу проблему на 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

0 голосов
/ 02 мая 2018

Самое простое, что нужно сделать, это просто преобразовать этот столбец в текстовый столбец, и тогда он не будет касаться его. Если вы не хотите делать это с самими данными, вы можете изменить их в объекте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...