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

时间:2017-10-26 15:32:12

标签: r ggplot2 rectangles

我想这个问题已经被问到了,但无论如何我会尝试,因为我找不到任何解决了我的问题。

我只是想绘制一系列矩形,然后根据值而不是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”,其中包含第一个文件的子集。如果两者都包含一个矩形,我希望它是蓝色,否则是红色。

点子:

所以我认为我能做到的就是解析文件,每次在两个文件中找到坐标对时,我都会向矢量添加“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))

我收到错误“美学必须是长度1或与数据相同(30):xmin,xmax,ymin,ymax,fill”

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

1 个答案:

答案 0 :(得分:1)

为包含用于着色的变量

的数据添加一列
 data$color<-colors

然后使用

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

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