围绕点放置边框

Dre*_*een 51 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)
Run Code Online (Sandbox Code Playgroud)

我想要的情节,除了点周围没有边框

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

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)
Run Code Online (Sandbox Code Playgroud)

这使:

根本不是我想要的情节

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

也许如果我可以获得轮廓和填充映射,我可以使用像这里的最后一组数字中的那个黑客来关闭传说.

Ben*_*ker 84

它有点模糊,但你必须使用pch> 20(我认为21:25是相关的形状):fill控制内部colo(u)环并colour控制边缘周围的线.

(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id), 
       colour="black",pch=21, size=5))
Run Code Online (Sandbox Code Playgroud)

更新:使用最近的ggplot2版本(例如2.0.0,不知道它有多远),默认指南是一个颜色栏.需要g0 + guides(fill="legend")获得带有点的图例,如此处所示的图表.默认的休息时间也发生了变化:要完全复制你需要的这个图g0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))...

在此输入图像描述

相关但不完全相同:如何在R中创建具有自定义点的绘图?.对该问题的接受答案使用@joran答案中显示的分层技术,但(IMO)使用该pch=21技术的@jbaums的答案是优越的.(我认为shape=21是另一种选择,甚至可能是首选pch=21.)

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


jor*_*ran 27

第一个问题是gimme:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(colour=id), size=12) + 
    geom_point(shape = 1,size = 12,colour = "black")
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

  • @Seanosapien肯定,只需使用`rnorm`或`jitter'手动"转换"`df`中的值来"抖动"这些点.您可能希望将这些值存储在新变量中,以防您需要下游的原始值. (2认同)

小智 6

我有同样的问题,但也许因为我使用的是带有纬度和经度的 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) 
Run Code Online (Sandbox Code Playgroud)

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

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

用黑色标出的点


ale*_*xo4 5

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

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))
Run Code Online (Sandbox Code Playgroud)