首页 文章

围绕点放置边框

提问于
浏览
46

我想使用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中的那个黑客来关闭传说 .

3 回答

  • 76

    它有点模糊,但你必须使用 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))
    

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

    enter image description here

    相关但不相同:how to create a plot with customized points in R? . 该问题的接受答案使用了@joran答案中显示的分层技术,但是(IMO)@jbaums使用 pch=21 技术的答案是优越的 . (我认为 shape=21 是另一种选择,甚至可能更喜欢 pch=21 . )

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

  • 24

    第一个问题是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

  • 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))
    

相关问题