r - 如何在ggplot的geom_polygon中正确填充颜色?

标签 r ggplot2 polygon

我正在尝试绘制散点图,然后覆盖一些多边形并在 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)

一切正常,除了填充颜色不同,边框和点都相同,颜色正确,但我无法匹配填充颜色。

最佳答案

您正在尝试通过将颜色向量直接用作 col 参数来将基本绘图方法应用于 ggplot。使用正确的 ggplot 方法将颜色映射到 data.frame 中的变量要容易得多。这就是我要做的:

首先,计算船体(你的代码对我不起作用):

library(dplyr)

hulls <- samples %>% 
  group_by(group) %>% 
  do(.[chull(.[2:3]), ])

那么我们只需要两层,以及一个离散的(factor)映射到 group 用于 colfill:

p <- ggplot(samples, aes(x = long, y = lat, col = factor(group), fill = factor(group)))+
  geom_polygon(data = hulls, alpha = 0.3) +
  geom_point()

自动给你一些漂亮的颜色,你就可以免费获得一个传奇!

enter image description here

现在,如果我们想使用您的颜色,我们必须引入比例:

p +
  scale_color_manual(values = col_list) +
  scale_fill_manual(values = col_list) 

enter image description here

如果您想在调色板中保留缺少的组 (4),则需要为 values 使用命名向量,因此在这种情况下,您可以提供 setNames(col_list, 1:7).

关于r - 如何在ggplot的geom_polygon中正确填充颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42481783/

相关文章:

c - .C 到 R 的接口(interface)

使用 R (dplyr) 中的多个变量将宽数据 reshape 为长数据

r - 从上一个非 NA 值获取索引

r - 假阳性与假阴性权衡图

r - 如何根据以前的方 block 递归创建方 block ?

r - 如何限制密度图和创建的级别数?

c - 如何将打印的 vector 列与 sprintf (R) 对齐

r - 如何在ggplot的facet_grid函数中应用下标

OpenLayers 从多边形顶点获取纬度、经度

java - 如何通过坐标查看路线