Построить немного на посту eipi10
м случае их 100 уникальных (X
, Y
) баллы, каждый из которых имеет идентификатор и принадлежитType
, В этих 100 баллах 20 баллов имеют значения для трех других типов (CT
,D
,OP
).
Вот процесс генерации данных:
df <- data.frame(X=rnorm(100,0,1), Y=rnorm(100,0,1),
ID=paste(rep("ID", 100), 1:100, sep="_"),
Type=rep("ID",100),
Val=c(rep(c('Type1','Type2'),30),
rep(c('Type3','Type4'),20)))
Случайно выбранные 20 баллов (sample(1:100,20)
) будет иметь значения, которые добавляют дополнительную информацию к точкам. Все эти 20 баллов в этом дополнительномType
будет иметь информацию вType=="ID"
.
dat1 <- data.frame(Type=rep('CT',20),
Val=paste(rep("CT", 20),
sample(1:6,20,replace=T), sep="_"))
dat1 <- cbind(df[sample(1:100,20),1:3],dat1)
dat2 <- data.frame(Type=rep('D',20),
Val=paste(rep("D", 20),
sample(1:6,20,replace=T), sep="_"))
dat2 <- cbind(df[sample(1:100,20),1:3],dat2)
dat3 <- data.frame(Type=rep('OP',20),
Val=paste(rep("OP", 20),
sample(1:6,20,replace=T), sep="_"))
dat3 <- cbind(df[sample(1:100,20),1:3],dat3)
df <- rbind(df, dat1, dat2, dat3)
Теперь, построение точек, имеющихD_1
,D_4
значения дляType=="D"
.
df %>% filter(Val %in% c('D_1','D_4')) %>%
ggplot(aes(X,Y,col=Val)) + geom_point() + geom_text(aes(label=ID))
Примечание: я добавил идентификаторыgeom_text(aes(label=ID))
только для целей иллюстрации.
К этому существующему графику я должен добавить оставшиеся 92 точки, которые не имеют значений выше двух или вообще не имеют значений. Я попытался добавить дополнительные пункты к существующему подходу, упомянутому ХэдлиВот:
p <- df %>% filter(Val %in% c('D_1','D_4')) %>% ggplot(aes(X,Y,col=Val)) + geom_point()
p + geom_point(data=df[(!df$ID %in% df$ID[df$Val %in% c('D_1','D_4')]) & df$Type=="ID",],
colour="grey")
Вопросов:
Как изобразить выбранные точки и дополнительные точки в одной команде или изящно возможно?
Есть ли возможностьdplyr
подход, который можно использовать в приведенной выше команде?
Обновить: df$Type=="ID"
очень важно, так как позволяет наносить оставшиеся точки только один раз. В противном случае некоторые из этих точек имеют значения либо вCT
или жеD
или жеOP
приводит к дублированию печати.
df %>% count(X,Y) %>% arrange(desc(n))
# # A tibble: 100 x 3
# X Y n
# <dbl> <dbl> <int>
# 1 -0.86266147 2.0368626 4
# 2 -0.61770678 0.4428537 4
# 3 1.32441957 -0.9388095 4
# 4 -1.65650319 -0.1551399 3
# 5 -0.99946809 1.1791395 3
# 6 -0.52881072 0.1742483 3
# 7 -0.25892382 0.1380577 3
# 8 -0.19239410 0.5269329 3
# 9 -0.09709764 -0.4855484 3
# 10 -0.05977874 0.1771422 3
# # ... with 90 more rows
Похоже, первые три точки с одинаковыми значениями X, Y имеют значения дляType
ID, CT, D, OP. Но эти точки должны быть нанесены только один раз.