Plotly add_segment является 2D и использует оси, отличные от графика - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь визуализировать рукоположение (NMDS), используя plot_ly. Я использую , чтобы создать посвящение NMDS. Вот воспроизводимый пример, показывающий, как используется для создания NMDS и как он визуализируется в 2D с использованием .

data(dune)
data(dune.env)

dune_NMDS <- metaMDS(dune, k = 3)

dune_envfit <- envfit(dune_NMDS, select(dune.env, A1), choices = 1:3)
dune_envfit2 <- as.data.frame(scores(dune_envfit, display = "vectors"))
dune_envfit3 <- cbind(dune_envfit2, env.variables = rownames(dune_envfit2))
species_scores <- as.data.frame(scores(dune_NMDS, "species"))
species_scores2 <- cbind(species_scores, Species = rownames(species_scores))
site_scrs <- as.data.frame(scores(dune_NMDS, display = "sites"))
site_scrs2 <- merge(site_scrs, select(dune.env, Management), by.x = "row.names", by.y = "row.names")

ggplot_species_sites <- ggplot(site_scrs2, aes(x = NMDS1, y = NMDS2)) + geom_point(aes(NMDS1, NMDS2, color = factor(site_scrs2$Management))) + ggrepel::geom_text_repel(data = species_scores2, aes(x = NMDS1, y = NMDS2, label = Species), size = 1.25)

ggplot_species_sites_env <- ggplot_species_sites + geom_segment(data = dune_envfit3, aes(x = 0, xend = NMDS1, y = 0, yend = NMDS2), arrow = arrow(length = unit(0.25, "cm")), colour = "grey10", lwd = 0.3) + ggrepel::geom_text_repel(data = dune_envfit3, aes(x = NMDS1, y = NMDS2, label = env.variables), cex = 4, direction = "both", segment.size = 0.25)

ggplot_species_sites_env

2D NMDS visualization using vegan

Теперь я пытаюсь использовать plot_ly из пакета , чтобы сделать то же самое в 3D. У меня проблемы с векторами окружающей среды. Векторы среды имеют свои собственные оси и не взаимодействуют с сюжетом. Они также выглядят двумерными, несмотря на принятие координаты z.

my_plotly <- plot_ly(x = site_scrs2$NMDS1, y = site_scrs2$NMDS2, z = site_scrs2$NMDS3, type = "scatter3d", mode = "markers", color = site_scrs2$Management)

my_plotly_species <- add_text(my_plotly, data = species_scores2, x = species_scores2$NMDS1, y = species_scores2$NMDS2, species_scores2$NMDS3, text = species_scores2$Species, inherit = FALSE)

my_plotly_species_segment <- add_segments(my_plotly_species, x = 0, xend = dune_envfit3$NMDS1, y = 0, yend = dune_envfit3$NMDS2, z = 0, zend = dune_envfit3$NMDS3, data = dune_envfit3, inherit = FALSE)

my_plotly_species_segment

plot_ly add_segment with different axes

В моих реальных данных add_segment s происходят из источника (0,0), но они все еще имеют свои собственные оси, и все еще выглядят 2D, как показано ниже:

Real data add_segment with origin but wrong axes

Есть ли способ сделать векторы среды, которые являются трехмерными, происходят из (0, 0,0), а использовать те же оси, что и на остальной части сюжета? Есть ли лучшая альтернатива add_segment в пределах ?

Спасибо за ваше время.

...