[英]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]), ])
然后我們需要的是兩層,以及為col
和fill
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.