我正在尝试绘制散点图,然后覆盖一些多边形并在ggplot 2中填充具有特定颜色的多边形,并且我在填充时获得正确的颜色有一些问题。我可以绘制散点图和多边形,并将散点图和多边形的边框着色为相同,但是当我尝试填充多边形时,它们总是出现不同的颜色或给我错误。
我的数据看起来像这样,
id lat long group
Ak 0.5109300 30.43713 1
Ak 0.5109300 30.43713 2
An 0.4709994 30.43434 1
An 0.4860330 30.44015 2
At 0.4956100 30.44610 2
At 0.4938700 30.44640 2
At 0.4837816 30.44658 3
Be 0.4932194 30.43455 3
Bo 0.4922330 30.44582 1
Bo 0.4922330 30.44582 3
cb 0.4929994 30.44486 5
de 0.4926486 30.45684 5
de 0.5000001 30.45331 5
eg 0.4854526 30.46824 6
eh 0.4765586 30.46987 6
gh 0.4822123 30.54835 7
我有两个颜色列表,一个用于散点图中的点,一个用于多边形的边框和填充,原因是有两个列表,是因为我按数据列网络对点进行分组,并希望在级别为1-5的所有点周围绘制多边形(但不是6和7)。所以我创建了以下颜色列表
col_list<-c("#FF222C", "#1DFBFF", "#FDFF24", "#2CFF18", "#FF38F4", "#C3C4C9", "#000000")
col_list5<-c("#FF222C", "#1DFBFF", "#FDFF24", "#2CFF18", "#FF38F4")
我用
绘制情节g<-ggplot(data= samples, aes(x=long, y=lat))+
geom_point(color = col_list[samples$group])+
theme(panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.background = element_blank(),
panel.border = element_rect(colour = "black", fill=NA, size=1))
然后我使用以下代码生成多边形
library(plyr)
samples_group1_5<-subset(samples, network < 6)
find_hull <- function(samples_group1_5) samples_group1_5[chull(samples_group1_5[,3], samples_group1_5[,2]), ]
hulls <- ddply(samples_group1_5, "group", find_hull)
g.col <- col_list5[hulls$group]
然后用
覆盖多边形g+
geom_polygon(data = hulls, alpha = 0.5, aes(fill=factor(group))) +
geom_polygon(data = hulls, alpha = 0, aes(group=factor(group)), colour=g.col)
一切正常,除了填充颜色不同,边框和点都是相同的,正确的颜色,但我无法获得匹配的填充颜色。
答案 0 :(得分:6)
您正尝试使用颜色向量直接作为col
参数将基本绘图方法应用于ggplot。使用适当的ggplot方法将颜色映射到data.frame中的变量要容易得多。这就是我要做的事情:
首先,计算船体(你的代码对我不起作用):
library(dplyr)
hulls <- samples %>%
group_by(group) %>%
do(.[chull(.[2:3]), ])
然后,我们需要的是两个图层,以及factor
和group
col
的离散(fill
)映射:
p <- ggplot(samples, aes(x = long, y = lat, col = factor(group), fill = factor(group)))+
geom_polygon(data = hulls, alpha = 0.3) +
geom_point()
自动给你一些漂亮的颜色,你就可以免费得到一个传奇!
现在,如果我们想要使用你的颜色,我们必须引入比例尺:
p +
scale_color_manual(values = col_list) +
scale_fill_manual(values = col_list)
如果您想在调色板中保留缺少的组(4),则需要使用values
的命名向量,因此在这种情况下,您可以提供setNames(col_list, 1:7)
。