首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于百分位数的颜色编码点

基于百分位数的颜色编码点
EN

Stack Overflow用户
提问于 2013-08-27 18:58:23
回答 3查看 7.7K关注 0票数 1

我有一些非常大的文件,其中包含一个基因组位置(位置)和相应的群体遗传统计(值)。我已经成功地绘制了这些值,并希望对值的前5% (蓝色)和1% (红色)进行颜色编码。我想知道在R中是否有一个简单的方法可以做到这一点。

我已经探索过编写一个定义分位数的函数,但是,其中许多都不是唯一的,因此导致函数失败。我也研究过stat_quantile,但只成功地用它绘制了一条标有95%和99%的线(其中一些线是对角线,对我来说没有任何意义)。(对不起,我是R.)

任何帮助都将不胜感激。

这是我的代码:(文件非常大)

代码语言:javascript
复制
########Combine data from multiple files
fst <- rbind(data.frame(key="a1-a3", position=a1.3$V2, value=a1.3$V3), data.frame(key="a1-a2", position=a1.2$V2, value=a1.2$V3), data.frame(key="a2-a3", position=a2.3$V2, value=a2.3$V3), data.frame(key="b1-b2", position=b1.2$V2, value=b1.2$V3), data.frame(key="c1-c2", position=c1.2$V2, value=c1.2$V3))


########the plot
theme_set(theme_bw(base_size = 16))

p1 <- ggplot(fst, aes(x=position, y=value)) + 
  geom_point() + 
  facet_wrap(~key) +
  ylab("Fst") + 
  xlab("Genomic Position (Mb)") +
  scale_x_continuous(breaks=c(1e+06, 2e+06, 3e+06, 4e+06), labels=c("1", "2", "3", "4")) +
  scale_y_continuous(limits=c(0,1)) +
  theme(plot.background = element_blank(),
    panel.background = element_blank(),
    panel.border = element_blank(),
    legend.position="none",
    legend.title = element_blank()
    )
p1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-28 01:24:59

这就是我处理它的方法--基本上是创建一个因子,定义每个观察在哪个组中,然后将colour映射到该因子。

首先,一些需要处理的数据!

代码语言:javascript
复制
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))

有很多方法可以获得一个因素来确定每个观察属于哪一组,这里有一个:

代码语言:javascript
复制
dat$quant  <- with(dat, factor(ifelse(value < quants[1], 0, 
                                  ifelse(value < quants[2], 1, 2))))

因此,quant现在指示一个观察是在95-99还是99+组中。然后,绘图中的点的颜色可以很容易地映射到quant

代码语言:javascript
复制
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()

票数 3
EN

Stack Overflow用户

发布于 2014-11-11 12:55:06

通过将quantilecut合并到aes颜色表达式中,您可以稍微更优雅地实现这一点。例如,本例中的col=cut(d,quantile(d))

代码语言:javascript
复制
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))

我还为美丽的传说标签创建了一个有用的工作流,可能有人会发现它很方便。

票数 6
EN

Stack Overflow用户

发布于 2013-08-27 21:49:56

我不知道这是不是你想要的,但也许这会有帮助:

代码语言:javascript
复制
# 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())  

结果我得到了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18473382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档