2013-02-05 135 views
3

我想用ggplot覆蓋幾個多邊形。覆蓋層的填充應該是透明的,但邊框應該是紅色的。我只想看到第一個多邊形的填充,所以我想使覆蓋層透明...但我不能讓它們完全透明。不知何故,我會更容易定義填充顏色爲不填充...但我不知道該怎麼做。有任何想法嗎?在ggplot2中覆蓋多邊形並使覆蓋層透明

下面是一些代碼來重現一個例子:

ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 

    values <- data.frame(
     id = ids, 
     value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) 
    ) 

    positions <- data.frame(
     id = rep(ids, each = 4), 
     x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 
      0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), 
     y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 
      2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) 
    ) 

    datapoly <- merge(values, positions, by=c("id")) 

    p <- ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=value, group=id)) 
    # overlay the same plot with red borders and transparent fill 
    p <- p + geom_polygon(aes(group=id, alpha=1),colour="red",size=1.1) 
    p 

without overlay with overlay

回答

5

如果你想在第二組的geom_polygon不被填充,只需設置fillNA

ggplot(datapoly, aes(x=x, y=y)) + 
    geom_polygon(aes(fill=value, group=id)) + 
    geom_polygon(aes(group=id), alpha=1,colour="red", fill=NA, size=1.1) 

enter image description here

在這種情況下,你並不需要兩個geom_polygon電話,雖然

ggplot(datapoly, aes(x=x, y=y)) + 
    geom_polygon(aes(fill=value, group=id), colour="red", size=1.1) 
+0

謝謝。這就是我正在尋找的東西。是的你是對的,在這個例子中不需要兩個多邊形。我只是使用這個代碼,因爲它很容易重現。 – Joschi