создание участка Манхэттена с помощью ggplot

#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)))