在R中ggplotly中控制点的顺序

时间:2019-10-18 09:26:22

标签: r ggplot2 r-plotly ggplotly

请考虑controlling order of points in ggplot2 in R?中给出的问题(以及可复制的示例)。

那里提供的解决方案(首先对data.frame进行排序,然后进行绘图)也对我有用。但是,当我想使用plotly::ggplotly()查看生成的图时,点的顺序又被弄乱了。有人知道如何在绘图图中保持点的顺序吗?

1 个答案:

答案 0 :(得分:0)

实际上,我发现即使在没有首先更改绘图/数据框的情况下,在此特定示例中,plotly也可以创建正确的顺序。

library(tidyverse)
library(plotly)

set.seed(1)
mydf <- data.frame(x=rnorm(500),  label = 'a', stringsAsFactors = FALSE) %>% mutate(y = rnorm(500)*0.1 + x)
mydf$label[50] <- "point"

ggplot(mydf) + geom_point(aes(x=x, y=y, color=label, size = label)) + 
  scale_size_manual(values = c(a = 0.1,point = 2))

plotly::ggplotly()

enter image description here

更安全的选择可能是@Dinre 's answer of your aforementioned question-首先将数据分离到不同的层。我在答案中使用了建议的快速基数R子集,但是您也可以使用split或tidyverse函数进行拆分。

df_layer_1 <- mydf[mydf$label=="a",]
df_layer_2 <- mydf[mydf$label=="point",]

ggplot() + 
  geom_point(data=df_layer_1, mapping = aes(x, y), colour="orange", size = .1) +
  geom_point(data=df_layer_2, aes(x, y), colour="blue", size = 2)

plotly::ggplotly()

enter image description here

R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

other attached packages:
[1] plotly_4.9.0  ggplot2_3.2.0