не может изменить атрибуты легенды в ggplot2 - PullRequest
2 голосов
/ 15 января 2020

Я пытаюсь изменить цвет, метки и разрывы в легенде этого графика, но опции scale_xxx_yyyy не будут работать. Любые предложения?

Мой ввод такой:

     GENE CHR       POS        key        value      LOGP
1   A1BG  19  58862834 MAF1P-pval 0.6456014613 0.1900355
2   A1CF  10  52566602 MAF1P-pval 0.0005533904 3.2569684
3    A2M  12   9225025 MAF1P-pval 0.6912238768 0.1603813
4  A2ML1  12   8975786 MAF1P-pval 0.6855731854 0.1639462
5 A4GALT  22  43089044 MAF1P-pval 0.3471331356 0.4595039
6  A4GNT   3 137843236 MAF1P-pval 0.6070832685 0.2167517
....
31205  ZBTB12   6  31868446 CADD20-pval 0.43193898 0.36457760
31206 ZCCHC24  10  81154122 CADD20-pval 0.01495022 1.82535253
31207 ZDHHC21   9  14619044 CADD20-pval 0.79231233 0.10110358
31208 ZMYND19   9 140477032 CADD20-pval 0.89922171 0.04613322
31209  ZNF710  15  90611241 CADD20-pval 0.07090869 1.14930051
31210  ZYG11B   1  53222142 CADD20-pval 0.27036413 0.56805093

Ключ переменной кодируется как фактор. и я сгенерировал следующий график, используя код:

ggplot(merge3, aes(x=POS, y=LOGP, color=Key)) + geom_point(size=0.3) + 
facet_grid(~CHR, switch="x", scales="free_x") + 
theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(), panel.spacing.x=unit(0.001, "lines"), panel.grid = element_blank(), panel.border = element_blank(), strip.background=element_rect(fill="white")) + 
labs(title="stacked Manhattan MAF1P, CADD20", y="-log10(p)", x= "chromosome") + 
scale_y_continuous(limits=c(0,12), expand = c(0,0)) + 
geom_hline(yintercept=5.3, color = "red") + 
geom_hline(yintercept=3.3, color = "blue")

Манхэттенский график, объединяющий два набора данных Manhattan plot combining two datasets

Теперь я пытаюсь изменить различные аспекты легенды, такие как цвет, заголовок , пометки или разрывы с использованием:

bp + scale_x_discrete(limits=c("MAF1"<="1%","CADD">="20"))
bp + scale_fill_discrete(name="Gene Sets", breaks=c("MAF <= 1%","CADD >=20"), labels=c("MAF1"<="1%","CADD">="20"))
bp + scale_fill_manual(values = c("#d8b365", "#f5f5f5"))

Но ни одна из этих работ, мне удалось изменить название легенды только с помощью:

bp + labs(colour="Gene Sets") 

Любые предложения будут высоко оценены

1 Ответ

1 голос
/ 15 января 2020

Обратите внимание, что вы используете «Ключ» в своем коде, тогда как показанные вами входные данные имеют «Ключ».

Сначала мы моделируем некоторые данные, которые выглядят как ваши:

library(TxDb.Hsapiens.UCSC.hg19.knownGene)
g = genes(TxDb.Hsapiens.UCSC.hg19.knownGene)
g = g[seqnames(g) %in% seqlevels(g)[1:24]]
seqlevels(g) = sub("chr","",seqlevels(g))

merge3 = data.frame(GENE=rep(g$gene_id,2),
CHR=rep(as.character(seqnames(g)),2),
POS=rep(start(g),2),
LOGP=-log10(runif(length(g)*2)),
Key = rep(c("MAF1P-pval","CADD20-pval"),each=length(g))
)
merge3$CHR = factor(merge3$CHR,levels=seqlevels(g)[1:24])
head(merge3)

       GENE CHR       POS       LOGP        Key
1         1  19  58858172 0.04981794 MAF1P-pval
2        10   8  18248755 1.83126403 MAF1P-pval
3       100  20  43248163 0.46686285 MAF1P-pval
4      1000  18  25530930 0.96742037 MAF1P-pval
5     10000   1 243651535 0.31012565 MAF1P-pval
6 100008586   X  49217763 0.61290850 MAF1P-pval

Затем мы строим график:

bp = ggplot(merge3, aes(x=POS, y=LOGP, color=Key)) + geom_point(size=0.3) + 
facet_grid(~CHR, switch="x", scales="free_x") + 
theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(), panel.spacing.x=unit(0.001, "lines"), panel.grid = element_blank(), panel.border = element_blank(), strip.background=element_rect(fill="white")) + 
labs(title="stacked Manhattan MAF1P, CADD20", y="-log10(p)", x= "chromosome") + 
scale_y_continuous(limits=c(0,12), expand = c(0,0)) + 
geom_hline(yintercept=5.3, color = "red") + 
geom_hline(yintercept=3.3, color = "blue")

Последняя часть, которая изменяет вашу легенду, поэтому ваши ключи отсортированный по алфавиту, чтобы сделать его менее запутанным, сначала установите цвета:

COLS=c("#d8b365", "#f5f5f5")
names(COLS) = levels(merge3$Key)

Затем мы используем разрывы, чтобы изменить порядок и дать метки:

bp+scale_color_manual(name="Gene Sets",values = COLS,
breaks = rev(names(COLS)),labels=c("MAF <= 1%","CADD >=20"))
...