围绕点放置边框

时间:2012-05-03 18:41:05

标签: r ggplot2

我想使用ggplot2在散点图上的点周围放置黑色边框,这些点基于数据填充。另外,我想避免使用黑色边框的图例条目,因为它将在每个点上。基本上我正在寻找这个情节,但每个点周围都有黑色边框。

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y))+geom_point(aes(colour=id), size=12)

the plot I want, except it doesn't have borders around the points

作为奖励,我希望没有黑色边框的传奇条目。我最好的尝试是:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id, colour="black"), size=12)

给出了:

not at all the plot I want

我不明白为什么那不能给我我想要的东西,更糟糕的是(对于我在ggplot2中的教育)我不明白为什么它似乎没有将填充颜色映射到任何东西!有什么帮助吗?

也许如果我可以获得轮廓并填充正确的映射,我可以使用像上一组数字here中那样的黑客来关闭图例。

5 个答案:

答案 0 :(得分:78)

这有点模糊,但你必须使用pch&gt; 20(我认为21:25是相关的形状):fill控制内部colo(u)环和{{1控制边缘周围的线条。

colour

更新:使用最近的ggplot2版本(例如2.0.0,不知道它的回程有多远),默认指南是颜色栏。需要(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id), colour="black",pch=21, size=5)) 才能获得带有点的图例,如此处所示的图表所示。默认的休息时间也发生了变化:要完全复制这个你需要g0 + guides(fill="legend")的图...

enter image description here

相关但不完全相同:how to create a plot with customized points in R?。该问题的公认答案使用了@joran答案中显示的分层技术,但是(IMO)@jbaums使用g0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))技术的答案是优越的。 (我认为pch=21shape=21的另一种选择,甚至可能更受欢迎。)

PS你应该把pch=21 放在映射(colour位)之外,如果你想绝对设置它而不是根据某个变量的值... < / p>

答案 1 :(得分:25)

第一个问题是gimme:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(colour=id), size=12) + 
    geom_point(shape = 1,size = 12,colour = "black")

而且,哦,你想要一个额外的传奇。我认为那样做了:

enter image description here

答案 2 :(得分:4)

我遇到了同样的问题,但我需要一个允许抖动的解决方案。为此,您需要使用带有边框的填充形状的pch和gridExtra包中的grid.edit函数。使用您的示例:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y, fill=id))+geom_point(pch=21, colour="Black", size=12)

library(gridExtra)
grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = 3))

答案 3 :(得分:1)

我有同样的问题,但是也许因为我使用的是经纬度的geom_map,所以截至2020年1月的其他答案对我不起作用。

重新确定问题,以下内容在要点周围没有黑色轮廓:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y))+geom_point(aes(colour=id), size=12) 

如果我同时声明颜色和填充美学,然后使用21号形状,问题就解决了。

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(colour=id, fill=id), 
  shape = 21,size = 12,colour = "black")

Points Outlined in Black

答案 4 :(得分:0)

如果您想要更多控制(例如,具有各种形状和透明度的点上的边框),请使用fill美学和形状21:25

ggplot(aes(x = Sepal.Length, y = Petal.Width, fill = Species, shape = Species), data = iris) + # notice: fill
    geom_point(size = 4, alpha = 0.5) + # transparent point
    geom_point(size = 4, fill = NA, colour = "black") + # black border
    scale_shape_manual(values = c(21:23)) + # enable fill aesthetic
    theme_classic()