用ggplot2绘制一系列矩形,使用不同的颜色

Draw a series of rectangles with ggplot2, using different colors

我想这个问题已经有人问过了,但我还是会尝试一下,因为我找不到任何可以解决我的问题的方法。

我只想绘制一系列矩形,然后根据值而不是 x 或 y 值为它们着色。

所以:我正在从文件中读取我想要绘制的矩形的开始和结束位置:

file <- read.table("positions.txt", header=FALSE)
names(file) <- c("start", "end")

char_start <- as.character(file$start)
first <- as.numeric(char_start)

char_end <- as.character(file$end)
last <- as.numeric(char_end)

mydata <- data.frame(first, last)

我的剧情是这样的:

plot <- ggplot() + geom_rect(data = mydata, aes(xmin = mydata$first, xmax = mydata$last, ymin = 2, ymax = 5)) 

现在我试图用两种不同的颜色填充矩形,具体取决于其他一些值。比方说,我有另一个文件 "positions_subset.txt",其中包含第一个文件的一个子集。如果两者都包含一个矩形,我希望它是蓝色的,否则是红色的。

想法:

所以我想我该怎么做,就是解析 to 文件,每次我在两个文件中找到坐标对时,我将“1”添加到矢量,否则添加“0”。所以最后我得到一个像这样的向量:

 in_both <- c(1,0,0,1,0...)

它的元素数量与我的矩形相同。然后我简单地做了:

colors <- ifelse(in_both == 1, "blue", "red")

但是,如果我尝试这样做

ggplot() + aes(xmin = mydata$first, xmax = mydata$last, ymin = 2, ymax = 5, fill=colors))

我收到错误 "Aesthetics must be either length 1 or the same as the data (30): xmin, xmax, ymin, ymax, fill"

我明白错误在说什么,但我不知道我该怎么做。我真的需要 x 轴上的每个点都有颜色信息吗?

向您的数据添加一列,其中包含用于着色的变量

 data$color<-colors

然后使用

 aes(xmin=first, xmax=last,...,fill=color)

您应该将变量的名称传递给 aes,而不是矢量