Избегание повторяющихся легенд с помощью сюжета R сюжетно приводит к отсутствующим точкам
Обновлено с более полным примером
В связи с /questions/32595885/kak-izbezhat-dublirovaniya-nadpisej-legendyi-v-syuzhete-ili-peredavat-polzovatelskie-nadpisi-legendyi, я делаю серию графиков маркерного типа с R plotly
4.8, которые в сочетании с plotly::subplot, и я скрываю легенду в первой из каждой пары графиков компонентов, чтобы на последнем графике не было дублированных легенд. Но при этом только первая (x,y) точка отображается для каждого из двух отображаемых фреймов данных (два верхних графика). Тестовый код, демонстрирующий это, приведен ниже.
require(plotly)
set.seed(1)
a <- data.frame(x=1:3, y=1:3)
b <- data.frame(x=(1:3)+.1, y=(1:3)+.1)
xu <- runif(1000, 0, 3)
xn <- (rnorm(1000) + 3) / 2
co <- 'black'
p <- plot_ly()
pa <- add_markers(p, mode='marker',
data=a, x=~x, y=~y, name='j', legendgroup='j',
size=I(5), color=I(co),
showlegend=FALSE)
pb <- add_markers(p, mode='marker',
data=b, x=~x, y=~y, name='j', legendgroup='j',
size=I(5), color=I(co),
showlegend=TRUE)
pc <- add_histogram(p, x=~xu, name='k', color=I('black'),
legendgroup='k', showlegend=FALSE)
pd <- add_histogram(p, x=~xn, name='k', color=I('black'),
legendgroup='k', showlegend=TRUE)
plotly::subplot(pa, pb, pc, pd, shareX=TRUE, shareY=FALSE, titleX=TRUE, nrows=4)
Спасибо за любые указатели. Чтобы точки были подавлены из вывода add_markers
Я должен иметь некоторые основные недоразумения plotly
,
Вот вывод sessionInfo()
:
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.1 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] bindrcpp_0.2.2 plotly_4.8.0 ggplot2_3.0.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.18 RColorBrewer_1.1-2 pillar_1.3.0 compiler_3.5.1 later_0.7.3 plyr_1.8.4
[7] bindr_0.1.1 tools_3.5.1 digest_0.6.15 jsonlite_1.5 tibble_1.4.2 gtable_0.2.0
[13] viridisLite_0.3.0 pkgconfig_2.0.2 rlang_0.2.2 shiny_1.1.0 rstudioapi_0.7 crosstalk_1.0.0
[19] yaml_2.2.0 withr_2.1.2 dplyr_0.7.6 httr_1.3.1 htmlwidgets_1.2 grid_3.5.1
[25] tidyselect_0.2.4 glue_1.3.0 data.table_1.11.4 R6_2.2.2 purrr_0.2.5 tidyr_0.8.1
[31] magrittr_1.5 scales_1.0.0 promises_1.0.1 htmltools_0.3.6 assertthat_0.2.0 xtable_1.8-2
[37] mime_0.5 colorspace_1.3-2 httpuv_1.4.5 lazyeval_0.2.1 munsell_0.5.0 crayon_1.3.4
2 ответа
Это помогает? Я думаю, что проблема была в том, как вы указали size
,
require(plotly)
set.seed(1)
a <- data.frame(x=1:3, y=1:3)
b <- data.frame(x=(1:3)+.1, y=(1:3)+.1)
xu <- runif(1000, 0, 3)
xn <- (rnorm(1000) + 3) / 2
co <- 'black'
p <- plot_ly()
pa <- add_markers(p,
data=a, x=~x, y=~y, name='j', legendgroup='j',
marker = list(size = 5), color=I(co), # attribute 'marker' controls size of points
showlegend=FALSE)
pb <- add_markers(p,
data=b, x=~x, y=~y, name='j', legendgroup='j',
marker = list(size = 5), color=I(co),# attribute 'marker' controls size of points
showlegend=TRUE)
pc <- add_histogram(p, x=~xu, name='k', color=I('black'),
legendgroup='k', showlegend=FALSE)
pd <- add_histogram(p, x=~xn, name='k', color=I('black'),
legendgroup='k', showlegend=TRUE)
plotly::subplot(pa, pb, pc, pd, shareX=TRUE, shareY=FALSE, titleX=TRUE, nrows=4)
Обратите внимание, что mode = 'markers'
(обратите внимание на множественное число) не требуется, если вы используете add_markers
, Однако это необходимо, если вы используете более общие add_trace
,
Может быть, у кого-то будет ответ с plot_ly()
, но вот альтернатива с ggplot2()
а также ggplotly()
,
Вы можете попробовать это:
c <- data.frame(x=c(1, 2, 3, 1, 2, 3), y=c(1, 2, 3, 1, 2, 3), c = c("PA", "PA", "PA", "PB", "PB", "PB"), z = c(1, 1, 1, 1, 1, 1))
ggplotly(ggplot(data = c, aes(x = x, y =y)) +
geom_point(aes(color = as.factor(z))) +
facet_wrap(~ c, ncol = 1) + theme_bw() +
theme(
strip.background = element_blank(),
strip.text.x = element_blank()
) +
scale_color_manual(name = "", values = c("black")))