我想制作一个条形图,其中多个数据点范围以不同方式突出显示。这里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.
提前致谢。
答案 0 :(得分:3)
正如@Alex所提到的,您可以使用group
变量来选择正确的颜色。
使用geom_bar(stat = "identity")
并将color
更改为fill
geom_bar
:
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)
如果你想要一个条形图,你必须设置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)