Изменить объект GGplot2 - PullRequest
       38

Изменить объект GGplot2

2 голосов
/ 02 апреля 2020

Мне было любопытно, однако, можно ли добавить какую-либо конкретную легенду c или указать, какой вид соответствует ожидаемому участку, чтобы узнать, какой это круг соответственно. В данный момент я использую поддельный набор данных, который называется зябликами. Пакет называется «cooccur», который создает объект ggplot. Мне было любопытно, как на самом деле отредактировать это, чтобы разместить здесь метки видов.

В качестве альтернативы можно извлечь метки и совпадения и использовать базовую графику, но это не так идеально.

enter image description here

КОД СНИПЕТ НИЖЕ

library(devtools)
#install_github("griffithdan/cooccur")
library(cooccur)

options(stringsAsFactors = FALSE)

data(finches)
cooccur.finches <- cooccur(mat=finches,
               type="spp_site",
               thresh=TRUE,
               spp_names=TRUE)
summary(cooccur.finches)
plot(cooccur.finches)
p <- obs.v.exp(cooccur.finches)

# the ggplot2 object can be edited directly and then replotted
p

# alternatively, use base graphics, This is what I am currently doing but it is not correct
cooc.exp <- cooccur.finches$results$exp_cooccur
cooc.obs <- cooccur.finches$results$obs_cooccur
sp1 <- cooccur.finches$results$sp1_name
sp2 <- cooccur.finches$results$sp2_name

plot(cooc.obs ~ cooc.exp)
  text(x = cooc.exp[1], y = cooc.obs[1], labels = sp1[1]) # plots only one name

1 Ответ

3 голосов
/ 02 апреля 2020

Я установил cooccur_1.3, и запуск вашего кода дает этот график:

library(cooccur)
options(stringsAsFactors = FALSE)
data(finches)
cooccur.finches <- cooccur(mat=finches,
               type="spp_site",
               thresh=TRUE,
               spp_names=TRUE)

plot(cooccur.finches)

enter image description here

В любом случае, если вы хотите получить разброс Заговор, вы можете go к кадру данных и сделать ggplot, ниже я только обозначаю точки, где вид 1 - Geospiza magnirostris, в противном случае 80 точек для маркировки - это совершенно безумно:

library(ggrepel)
library(ggplot2)

df = cooccur.finches$results
df$type = "random"
df$type[df$p_lt<0.05] = "negative"
df$type[df$p_gt<0.05] = "positive"

ggplot(df,aes(x=exp_cooccur,y=obs_cooccur)) + 
geom_point(aes(color=type)) + geom_abline(linetype="dashed") + 
geom_label_repel(data=subset(df,sp1_name=="Geospiza magnirostris"),
aes(label=paste(sp1_name,sp2_name,sep="\n")),
size=2,nudge_x=-1,nudge_y=-1) +
scale_color_manual(values=c("#FFCC66","light blue","dark gray")) +
theme_bw()

enter image description here

...