在ggplot中子集并突出显示多个数据点

时间:2016-07-13 09:21:56

标签: r ggplot2

我想制作一个条形图,其中多个数据点范围以不同方式突出显示。这里r - ggplot2 - highlighting selected points and strange behavior的以下问题接近于我想要做的事情,除了不是仅仅对一个数据点范围进行子集化和突出显示,我想要对多个数据点范围进行子集化并生成差分彩色条形图。

我使用此代码(根据上述问题改编)红色突出显示10到30之间的数据子集。

a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a,b=b)
mydata[10:30,]
ggplot(mydata,aes(x=a,y=b)) + geom_point(colour="blue") + geom_point(data=mydata[10:30,], aes(x=a, y=b), colour="red")

如何修改上述代码以差异突出显示多个子集,例如1:9(绿色),10:30(红色)和40:50(青色)?另一个问题是,如果我通过将ggplot中的geom_point更改为geom_bar来生成条形图来修改该代码,则代码会返回错误Error: stat_count() must not be used with a y aesthetic.

提前致谢。

2 个答案:

答案 0 :(得分:3)

正如@Alex所提到的,您可以使用group变量来选择正确的颜色。

使用geom_bar(stat = "identity")并将color更改为fill geom_barenter image description here

a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a,b=b)
mydata$group        <- "a" 
mydata$group[1:9]   <- "green"
mydata$group[10:30] <- "red"
mydata$group[40:50] <- "cyan"

ggplot(mydata,aes(x=a,y=b, fill = group)) + 
geom_bar(stat = "identity") +
scale_fill_manual(values=c("a" = "black", "green" = "green", "red" = "red", "cyan" = "cyan"), guide = FALSE) 

答案 1 :(得分:1)

我猜想如果你想为数据的不同子集设置不同的颜色,这些子集代表不同的组。在ggplot中处理此问题的常用方法是创建一个组变量。在ggplot中,您可以轻松地为您的组设置颜色审美。

library(ggplot2)
a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a, b=b)
mydata$group        <- "a" 
mydata$group[1:9]   <- "b"
mydata$group[10:30] <- "c"
mydata$group[40:50] <- "d"

ggplot(mydata,aes(x=a,y=b, col = group)) + 
  geom_point() +
  scale_color_manual(values=c("blue", "green", "red", "cyan"), guide = FALSE) 

enter image description here
如果你想要一个条形图,你必须设置stat =“identity”,如下所示:

ggplot(mydata,aes(x=a,y=b, col = group, fill = group)) + 
  geom_bar(stat = "identity") +
  scale_color_manual(values=c("blue", "green", "red", "cyan"), guide = FALSE) +
  scale_fill_manual(values=c("blue", "green", "red", "cyan"), guide = FALSE)

enter image description here