我是R的新人,我有一些与bloxpot有关的基本问题。我有一个数据框9800 obs。 (这些是基因)有17个变量(这些是我的样本),以及这些基因的表达值。我在下面放了一个简化的例子。
View(df)
sample1 sample2 sample3
gene1 1 2 25
gene2 5.2 5 32
gene3 3.1 3 50
gene4 2.5 2.6 21
首先,我想将每个样本与特定条件(响应者或无响应者)相关联。在这种情况下,样本1和2将是响应者而样本3是非响应者。如果我创建这样的数据框会有效吗?
condition <- c('responder','responder','non-responder')
sample_condition <- cbind(colnames(df), condition)
View(sample_condition)
sample condition
sample1 responder
sample2 responder
sample3 non-responder
现在,我想用ggplot做一个箱形图,显示我设计的2个条件下gene1的表达值。 example of the boxplot I want. I would like to include the dots for each sample as well
我认为我的问题实际上是如何告诉ggplot()绘制仅仅特定基因的df子集并将我的样本分成我之前设计的2个条件。
提前致谢!
答案 0 :(得分:1)
欢迎来到堆栈, 看起来你需要首先从宽格式数据转换为长格式数据,然后创建一个boxplot。我将在tidyverse中使用Hadley Wickham的几个包来实现这一目标。
library(tidyverse)
df <- gather(df, condition, values, -condition)
ggplot(df, aes(condition, values))+
geom_boxplot()
完成基础绘图后,您可以在顶部添加一些透明度或alpha
以及围绕垂直轴的一些“摆动”,以使它们更好地显示颜色。
ggplot(df, aes(condition, values, color = condition))+
geom_boxplot(outler.fill = F, alpha = .5)+
geom_jitter(alpha = .5,width = .1)
答案 1 :(得分:1)
您的示例数据
df <- data.frame(sample1=runif(4),
sample2=runif(4),
sample3=runif(4))
rownames(df) <- c("gene1","gene2","gene3","gene4")
sample1 sample2 sample3
gene1 0.7068424 0.81313273 0.1021884
gene2 0.2212768 0.87664923 0.3599538
gene3 0.7835704 0.08712978 0.7942733
gene4 0.3909335 0.70202803 0.8851641
定义您的响应者和非响应者
responders <- c("sample1","sample2")
nonresponders <- setdiff(colnames(df),responders)
仅过滤gene 1
和标签条目
library(tidyverse)
gene1 <- df[1,] %>%
gather() %>%
mutate(category=ifelse(key%in%responders,"responder","nonresponder"))
制作情节
qplot(x=category, y=value, data=gene1, geom=c("boxplot","jitter"), fill=category)