在点周围放置边框 [英] Place a border around points
问题描述
我想使用 ggplot2 在基于数据填充的散点图上的点周围放置黑色边框.另外,我想避免黑色边框的图例条目,因为它将在每个点上.基本上我正在寻找这个情节,但每个点周围都有黑色边框.
df <- data.frame(id=runif(12), x=1:12, y=runif(12))ggplot(df,aes(x=x,y=y))+geom_point(aes(颜色=id),大小=12)
作为奖励,我不想有黑色边框的图例条目.我最好的尝试是:
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)
给出:
我不明白为什么这没有给我想要的东西,更糟糕的是(对于我在 ggplot2 中的教育)我不明白为什么它似乎没有将填充颜色映射到任何东西!有什么帮助吗?
也许如果我能正确地获得轮廓和填充映射,我可以使用像最后一组数字中的那个黑客.该问题的公认答案使用@joran 的答案中显示的分层技术,但(IMO)@jbaums 使用 pch=21
技术的答案更胜一筹.(我认为 shape=21
是 pch=21
的替代方案,甚至可能更受欢迎.)
PS 如果要绝对设置而不是根据一些变量...
I'd like to place a black border around points on a scatterplot that are filled based on data, using ggplot2. Also, I would like to avoid having a legend entry for the black border since it will be on each point. Basically I'm looking for this plot, but with a black border around each point.
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)
As a bonus, I'd like to not have a legend entry for the black border. My best try is:
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)
Which gives:
I don't understand why that doesn't give me what I want, and worse (for my education in ggplot2) I don't understand why it doesn't seem to map fill color to anything! Any help?
Perhaps if I can get the outline and fill mapping right I can use a hack like the one in hte last set of figures here to turn off the legend.
It's a bit obscure, but you have to use pch
>20 (I think 21:25 are the relevant shapes): fill
controls the interior colo(u)ring and colour
controls the line around the edge.
(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id),
colour="black",pch=21, size=5))
update: with recent ggplot2 versions (e.g. 2.0.0, don't know how far back it goes) the default guide is a colourbar. Need g0 + guides(fill="legend")
to get a legend with points as in the plot shown here. The default breaks have changed, too: to exactly replicate this plot you need g0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))
...
Related but not identical: how to create a plot with customized points in R? . The accepted answer to that question uses the layering technique shown in @joran's answer, but (IMO) the answer by @jbaums, which uses the pch=21
technique, is superior. (I think shape=21
is an alternative, and perhaps even preferred, to pch=21
.)
PS you should put colour
outside the mapping (aes
bit) if you want to set it absolutely and not according to the value of some variable ...
这篇关于在点周围放置边框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!