Вопрос по percentile, facet, color-codes, r, ggplot2 – Цветовые кодовые точки на основе процентиля в ggplot

0

У меня есть несколько очень больших файлов, которые содержат геномную позицию (положение) и соответствующую популяционную генетическую статистику (значение). Я успешно нанес на график эти значения и хотел бы обозначить цветом верхние 5% (синий) и 1% (красный) значений. Мне интересно, есть ли простой способ сделать это в R.

Я исследовал написание функции, которая определяет квантили, однако многие из них оказываются не уникальными и, таким образом, вызывают сбой функции. Я'Мы также изучили stat_quantile, но добились успеха в использовании этого для построения линии, обозначающей 95% и 99% (и некоторые линии были диагоналями, которые не имели никакого смысла для меня.) (Извините, я новичок в R. )

Любая помощь приветствуется.

Вот мой код: (файлы очень большие)

########Combine data from multiple files
fst 
Вы'Вы получите более быстрые и качественные ответы, если предоставите данные для работы. Показываю, как вы получилиfst Безразлично»не поможет, потому что мы неу вас нет никаких начальных данных. Вы можете опубликовать некоторые из ваших собственных данных сdput()или сделать минимальный набор пустышек. alexwhan
Прости алхан! Я новичок в этом Q &Формат и скотчНе думаю, что редактирование будет видно, если оно будет принято ответ. Я не имеля подумал опубликовать это как новый вопрос. ONeillMB1
Это'не принято принимать ответ на ваш вопрос, затем решите изменить вопрос через месяц, отказаться от ответа и изменить свой вопрос - это полностью противоречит цели архивных вопросов и ответовФормат. Если у вас есть новый вопрос, опубликуйте новый вопрос! Лучше всего отменить редактирование, повторно принять ответ и опубликовать новый вопрос. alexwhan
новый вопрос сейчас здесь:stackoverflow.com/questions/19330546/... ONeillMB1

Ваш Ответ

3   ответа
2

определяющий, в какую группу входит каждое наблюдение, а затем отображалcolour к этому фактору.

Во-первых, некоторые данные для работы!

dat <- data.frame(key = c("a1-a3", "a1-a2"), position = 1:100, value = rlnorm(200, 0, 1))
#Get quantiles
quants <- quantile(dat$value, c(0.95, 0.99))

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

dat$quant  <- with(dat, factor(ifelse(value < quants[1], 0, 
                                  ifelse(value < quants[2], 1, 2))))

Такquant теперь указывает, относится ли наблюдение к группе 95-99 или 99+. Цвет точек на графике может быть легко сопоставлен.quant

ggplot(dat, aes(position, value)) + geom_point(aes(colour = quant)) + facet_wrap(~key) +
  scale_colour_manual(values = c("black", "blue", "red"), 
                      labels = c("0-95", "95-99", "99-100")) + theme_bw()

+1. Я думаю, что это может быть немного более эффективно, используя cut:transform(dat, quant=cut(value, quantile(value, c(0,.95,.99,1)), c("0-95", "95-99", "99-100"), TRUE)) Señor O
Спасибо, Алекс! Это сработало хорошо. Сейчас я'Я хотел бы добавить новый уровень сложности для цветовой кодировки (см. отредактированный пост выше) и не может получить правильные значения. Есть идеи? Спасибо! ONeillMB1
0

# a little function which returns factors with three levels, normal, 95% and 99%
qfun <- function(x, qant_1=0.95, qant_2=0.99){
  q <- sort(c(quantile(x, qant_1), quantile(x, qant_2)))
  factor(cut(x, breaks = c(min(x), q[1], q[2], max(x))))
}


df <- data.frame(samp=rnorm(1000))

ggplot(df, aes(x=1:1000, y=df$samp)) + geom_point(colour=qfun(df$samp))+
  xlab("")+ylab("")+
  theme(plot.background = element_blank(),
        panel.background = element_blank(),
        panel.border = element_blank(),
        legend.position="none",
        legend.title = element_blank())  

в результате я получил

3

включивquantile а такжеcut вaes цветовое выражение. Напримерcol=cut(d,quantile(d)) в этом примере: я

d = as.vector(round(abs(10 * sapply(1:4, function(n)rnorm(20, mean=n, sd=.6)))))

ggplot(data=NULL, aes(x=1:length(d), y=d, col=cut(d,quantile(d)))) + 
  geom_point(size=5) + scale_colour_manual(values=rainbow(5))

Мы также сделали полезный рабочий процесс длякрасивые легенды этикетки который кому-то может пригодиться.

Похожие вопросы