我试图用一些数据生成一个直方图,但我找不到让ggplot2工作来实现我想要的东西的方法。
对于上下文,我的数据如下所示:(列名)
​
| Name | Total Enrichment % (A+B+C+D) | %A | %B | %C | %D |
我想生成一个直方图,显示总浓缩列的分布,然后用 4 种颜色填充该列,显示 A、B、C 和 D 的不同百分比。
我已经尝试将数据转换为长格式,但仍然无法准确获得我想要的数据。
任何建议都会非常有帮助!非常感谢你!
这是一个例子(它不是原始数据,只是其中的一小部分):
dat <- read.table(text = "Name Total A B C D
1 0.1396104 0.029220779 0.009740260 0.029220779 0.07142857
2 0.1250000 0.010869565 0.021739130 0.016304348 0.07608696
3 0.1337580 0.006369427 0.000000000 0.025477707 0.10191083
4 0.1239669 0.016528926 0.024793388 0.033057851 0.04958678
5 0.1242938 0.011299435 0.016949153 0.039548023 0.05649718
6 0.1311475 0.000000000 0.000000000 0.021857923 0.10928962
7 0.1376147 0.004587156 0.004587156 0.004587156 0.12385321
8 0.1574074 0.046296296 0.018518519 0.032407407 0.06018519
9 0.1269036 0.010152284 0.010152284 0.020304569 0.08629442", sep = "", header=T)
我的目标是使用总富集数据创建一个直方图,但每列都填充了其他贡献变量(A、B、C 和 D)
谢谢!
编辑
感谢 StupidWolf 惊人的帮助和评论,我可以更接近我想要的东西。
这是我到目前为止的内容(它并不完美,但到目前为止还不错)
我想做的是将 y 轴设为对数刻度,因为我在较低范围内有很多数据,而且我也对具有更高丰富度的数据感兴趣。另外,有谁知道为什么栏没有填满?为什么会有这些空白?
再次非常感谢您的帮助和耐心!
我正在对您想要做什么进行有根据的猜测,首先让我们获取一些数据:
set.seed(321)
library(ggplot2)
library(dplyr)
dat = data.frame(Name=1:500,matrix(runif(500*4),ncol=4))
colnames(dat)[-1] = LETTERS[1:4]
dat$Total = rowSums(dat[,-1])
如果要计算A、B、C、D对Total的每个binned值的贡献,那么我们需要做Total的直方图,看起来像这样,我们存储breaks来对每一行进行分类:
his_all = hist(dat$Total,br=40)
dat$bin = cut(dat$Total,br=his_all$breaks,labels=his_all$mids)
在上面,我使用直方图的中间来表示再次绘制条形图的位置。因此有一个将因子标签转换为数字的步骤。然后我们需要计算 A 对 D 对每个总数的贡献,然后旋转更长的时间并绘制:
dat %>%
mutate_at(c("A","B","C","D"),~.x/Total) %>%
pivot_longer(A:D) %>%
mutate(bin=as.numeric(as.character(bin))) %>%
ggplot(aes(x=bin,y=value,fill=name)) +
geom_col() +
xlab("enrichment")
另一种可视化数据的方法:
dat$interval = cut_interval(dat$Total,5)
dat %>% mutate_at(c("A","B","C","D"),~.x/Total) %>%
group_by(interval) %>% select(c(interval,A:D)) %>%
summarize_all(mean) %>% pivot_longer(-interval) %>%
ggplot(aes(x=interval,y=value,fill=name)) + geom_col()
这会向您显示 Total 的每个范围,A/B/C/D 的比例对它的贡献。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句