簡體   English   中英

如何在ggplot中的geom_polygon中正確填充顏色?

[英]How to fill colors correctly in geom_polygon in ggplot?

我正在嘗試繪制散點圖,然后覆蓋一些多邊形並在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]), ])

然后我們需要的是兩層,以及為colfill group的離散( factor )映射:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM