我想这个问题已经被问到了,但无论如何我会尝试,因为我找不到任何解决了我的问题。
我只是想绘制一系列矩形,然后根据值而不是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轴上的每个点都有颜色信息吗?
答案 0 :(得分:1)
为包含用于着色的变量
的数据添加一列 data$color<-colors
然后使用
aes(xmin=first, xmax=last,...,fill=color)
你应该将变量的名称传递给aes,而不是向量