自ggplot2 2.0.0起,order
美学已被弃用,自ggplot2 2.2.0起,堆叠顺序将锁定为分组。
你可以做一些简单的事情,比如使用position_stack
进行反向或调整,但是你可以根据值以不同的顺序堆叠条形码吗?
例如,我的以下情节受到RNA序列标识的启发:
如何按降序对每个堆栈进行排序?对于位置7,这将把“G”(红色)置于顶部,然后是“A”(黄色),然后是“U”(蓝色),最后是“C”(绿色)。但对于位置8,“U”(蓝色)将位于顶部。
答案 0 :(得分:3)
对于这种类型的绘图,我将构建一个由geom_rect
绘制的数据集。例如,构造下面的数据集,使得矩形的ymin
和ymax
由每个位置处的ACGT的顺序定义。下面的图形可能与您在问题中的图形看起来不太一样,但所提供的方法应该根据您的数据集生成类似的图形。您可能需要调整geom_text
值和颜色,但我认为要回答的主要问题是如何构建数据集并绘制它。
library(ggplot2)
library(dplyr)
library(tidyr)
# Make some random data
set.seed(42)
rna_seq_data <-
data_frame(position = 1:25,
A = floor(runif(25, 0, 5000)),
C = floor(runif(25, 0, 5000)),
G = floor(runif(25, 0, 5000)),
T = floor(runif(25, 0, 5000)))
tidyr::gather(rna_seq_data, key, value, -position) %>%
dplyr::group_by(position) %>%
dplyr::mutate(order = rank(value)) %>%
dplyr::arrange(position, order) %>%
dplyr::mutate(ymin = dplyr::if_else(order == 1, 0, lag(value)),
ymax = cumsum(value),
xmin = position - 0.45,
xmax = position + 0.45) %>%
dplyr::ungroup() %>%
ggplot(.) +
aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = key) +
geom_rect()