我正在尝试在带有图例的ggplot中自动显示灰色的背景数据。我的目标是在图例中包含灰色数据点,或者制作带有手动标题的第二个图例。但是我在做这两个中的任何一个时都失败了。我的数据格式很长。
require(ggplot2)
xx<-data.frame(observation="all cats",x=1:2,y=1:2)
yy<-data.frame(observation=c("red cats","blue cats"),x=3:4,y=3:4)
g<-ggplot() +
geom_point(aes(x,y, colour=factor(observation)), colour="grey60", size=5, data=xx) +
geom_point(aes(x,y, colour=factor(observation)), size=5, data=yy) +
scale_color_discrete(name = "ltitle")
g
我尝试将data.frames与rbind.data.frame
合并,这会生成一个很好的图例,但后来我无法用灰色为背景数据着色并同时保持ggplot颜色。
我也意识到这解决了这个问题:
g<-ggplot(aes(x,y, colour=factor(observation)), colour="grey60", data=xx) +
geom_point(size=5) +
geom_point(aes(x,y, colour=factor(observation)), size=5, data=yy) +
scale_color_discrete(name = "ltitle")
g
但是我无法做到这一点,因为我之前使用的函数会创建一个复杂的空图,然后我会添加geom_points
。
答案 0 :(得分:1)
一种解决方案是创建颜色矢量并将其传递给scale_color_manual
。
xx <- data.frame(observation = "all cats",x = 1:2,y = 1:2)
yy <- data.frame(observation = c("red cats", "blue cats"),x = 3:4,y = 3:4)
# rbind both datasets
# OP tried to use rbind.data.frame here
plotData <- rbind(xx, yy)
# Create color vector
library(RColorBrewer)
# Extract 3 colors from brewer Set1 palette
colorData <- brewer.pal(length(unique(plotData$observation)), "Set1")
# Replace first color first wanted grey
colorData[1] <- "grey60"
# Plot data
library(ggplot2)
ggplot(plotData, aes(x, y, colour = observation)) +
geom_point(size = 5)+
scale_color_manual(values = colorData, name = "ltitle")
答案 1 :(得分:1)
假设您的绘图没有其他需要填充参数的geom,以下是修复背景数据geom_point
图层颜色而不影响其他geom_point
图层的变通方法:
g <- ggplot() +
geom_point(aes(x, y,
fill = "label"), # key change 1
shape = 21, # key change 2
color = "grey50", size = 5,
data = xx) +
geom_point(aes(x, y, colour = factor(observation)), size = 5, data = yy) +
scale_color_discrete(name = "ltitle") +
scale_fill_manual(name = "", values = c("label" = "grey50")) # key change 3
g
shape = 21
为您提供一个看起来像默认圆点的形状,但除了color参数外还接受填充参数。然后,您可以在geom_point
中将xx的scale_fill_manual()
图层填充设置为灰色(这会创建填充图例),同时将color = "grey50"
保留在aes()
之外(这不会添加到颜色图例中。
yy的geom_point
图层的色标不受任何影响。
P.S。刚刚意识到我使用了&#34; grey50&#34;而不是&#34; grey60&#34; ......但其他一切仍然适用。 :)
答案 2 :(得分:0)
我提出了与Z.Lin完全相同的解决方案,但使用了来自rbind.data.frame
的组合数据框。同样,它使用scale_colour_manual
和向量colors
指定颜色映射:
require(ggplot2)
xx<-data.frame(observation="all cats",x=1:2,y=1:2)
yy<-data.frame(observation=c("red cats","blue cats"),x=3:4,y=3:4)
zz <- rbind.data.frame(xx,yy)
colors <- c(
"all cats" = "grey60",
"red cats" = "red",
"blue cats" = "blue"
)
g<-ggplot() +
geom_point(aes(x,y, colour=factor(observation)), size=5, data=zz) +
scale_color_manual(values= colors, name = "ltitle")
g