#r #ggplot2
Вопрос:
Я пытался создать график Манхэттена с помощью ggplot, который я, наконец, начал работать. Однако я не могу заставить точки быть окрашены хромосомой, несмотря на то, что попробовал несколько разных примеров, которые я видел в Интернете. Я прилагаю свой код и полученный ниже сюжет. Кто-нибудь может понять, почему код не может раскрасить точки по хромосоме?
library(tidyverse)
library(vroom)
# threshold to drop really small -log10 p values so I don't have to plot millions of uninformative points. Just setting to 0 since I'm running for a small subset
min_p <- 0.0
# reading in data to brassica_df2, converting to data frame, removing characters from AvsDD p value column, converting to numeric, filtering by AvsDD (p value)
brassica_df2 <- vroom("manhattan_practice_data.txt", col_names = c("chromosome", "position", "num_SNPs", "prop_SNPs_coverage", "min_coverage", "AvsDD", "AvsWD", "DDvsWD"))
brassica_df2 <- as.data.frame(brassica_df2)
brassica_df2$AvsDD <- gsub("1:2=","",as.character(brassica_df2$AvsDD))
brassica_df2$AvsDD <- as.numeric(brassica_df2$AvsDD)
brassica_df2 <- filter(brassica_df2, AvsDD > min_p)
# setting significance threshhold
sig_cut <- -log10(1)
# settin ylim for graph
ylim <- (max(brassica_df2$AvsDD) 2)
# setting up labels for x axis
axisdf <- as.data.frame(brassica_df2 %>% group_by(chromosome) %>% summarize(center=( max(position) min(position) ) / 2 ))
# making manhattan plot of statistically significant SNP shifts
manhplot <- ggplot(data = filter(brassica_df2, AvsDD > sig_cut), aes(x=position, y=AvsDD), color=as.factor(chromosome))
geom_point(alpha = 0.8)
scale_x_continuous(label = axisdf$chromosome, breaks= axisdf$center)
scale_color_manual(values = rep(c("#276FBF", "#183059"), unique(length(axisdf$chromosome))))
geom_hline(yintercept = sig_cut, lty = 2)
ylab("-log10 p value")
ylim(c(0,ylim))
theme_classic()
theme(legend.position = "n")
print(manhplot)
Ответ №1:
Я думаю, что вам просто нужно переместить свой color=...
аргумент внутри вызова в aes()
:
ggplot(
data = filter(brassica_df2, AvsDD > sig_cut),
aes(x=position, y=AvsDD),
color=as.factor(chromosome))
становится…
ggplot(
data = filter(brassica_df2, AvsDD > sig_cut),
aes(x=position, y=AvsDD, color=as.factor(chromosome)))