用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,而不是矢量
我想这个问题已经有人问过了,但我还是会尝试一下,因为我找不到任何可以解决我的问题的方法。
我只想绘制一系列矩形,然后根据值而不是 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,而不是矢量