r - 如何在 barplot r 上的 geom_point 中使用抖动
问题描述
我试图用不同颜色的抖动点绘制条形图。我可以用 geom_segment 绘制绘图,但我想使用抖动点而不是线(段)。这是我的代码:
条形图的数据
dat = read.table(text="chromosome size
1 640851
2 947102
3 1067971
4 1200490
5 1343557
6 1418242
7 1445207
8 1472805
9 1541735
10 1687656
11 2038340
12 2271494
13 2925236
14 3291936", header=T, stringsAsFactors=F)
创建一个演示数据集“标记”以绘制抖动点。
pos = read.table(text="Chromosome Position
3 817702
5 1041685
11 488717
12 1556936
13 1131566
14 1776463", header=T, stringsAsFactors=F)
mark <- data.frame()
for (i in 1:nrow(pos)){
df <- data.frame(Chr=rep(pos$Chromosome[i],100),Pos=sort(sample.int(pos$Position[i],100)))
mark <- rbind(mark,df)
}
mark <- mark[order(mark$Chr,mark$Pos),]
pp <- replicate(6, diff(c(0, sort(runif(2)), 1)))
pp <- round(pp %*%diag(pos$Position),0)
pp[2,] <- pp[2,] +pp[1,]
pp[3,] <- pp[2,]+pp[3,]
type <- replicate(6,sample(LETTERS[1:3],3))
for (i in 1:length(unique(mark$Chr))){
for (j in 1:100){
if (mark$Pos[(i-1)*100+j] >0 & mark$Pos[(i-1)*100+j] <= pp[1,i]) {mark$Type[(i-1)*100+j] <- type[1,i]}
if (mark$Pos[(i-1)*100+j] >pp[1,i] & mark$Pos[(i-1)*100+j] <= pp[2,i]) {mark$Type[(i-1)*100+j] <- type[2,i]}
if (mark$Pos[(i-1)*100+j] >pp[2,i] & mark$Pos[(i-1)*100+j] <= pp[3,i]+1) {mark$Type[(i-1)*100+j] <- type[3,i]}
}
}
用段绘制条形图:
ggplot(data=dat, aes(chromosome, size)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black")) +
geom_bar( stat="identity", fill="grey70") +
geom_segment(data=mark, aes(x=Chr-0.45, xend=Chr+0.45, y=Pos,
yend=Pos, colour=Type), size=2)
我想用抖动点绘制条形图。当我使用 geom_point 替换 geom_segment 时。抖动实际上是在“dat”数据而不是“mark”数据上。这不是我想要的。我想在“标记”数据上使用带有抖动点的条形图。这是我用来绘制情节的代码:
ggplot(data=dat, aes(chromosome, size)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black")) +
geom_bar( stat="identity", fill="grey70") +
geom_point(data=mark, aes(x=Chr, y=Pos, colour=Type), size=1) + geom_jitter(width=0.5)
谢谢你的帮助。
解决方案
推荐阅读
- ios - Siri Shortcuts 可以处理动态短语和变量吗
- java - 使用 Gson 库将 JSON 消息解析为 Java Pojo,同时将 JSON 映射到字符串字段
- google-sheets - Google Sheets api append 方法没有在最后一行之后添加一行
- reactjs - 使用 React-Hook-Form V7 在 DatePicker Antd 中设置默认值
- python - 重置函数python的返回值
- html - Twitch-API ruby gem 更新视图计数缓慢,如何获取实时流数据?
- c# - 操作成功时如何打印消息?
- r - 将具有相同名称的两列粘贴到 R 中的同一数据框中
- dynamics-gp - taRMDistribution - 帐户索引 (DSTINDX) 的帐户不存在
- javascript - 需要数学