2017-03-02 141 views
2

coord_polar曲線線,有時當你可能不希望(即,當空間被認爲是離散的不連續的):GGPLOT2:用直線連接在極座標中的點2

iris %>% gather(dim, val, -Species) %>% 
    group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
    ggplot(aes(dim, val, group=Species, col=Species)) + 
    geom_line(size=2) + coord_polar() 

enter image description here

爲此,previous workaround不再有效。任何人有任何想法更新的解決方法?

+2

有[ggradar](http://www.ggplot2-exts.org/ggradar.html),如果這是你想要做的,或者你可以做出必要的曲線與ggforce直線,但一般這是極座標圖表示數據的方式。 – alistaire

+0

嗯。對於連續座標軸,我同意,但不一定對於這裏的部分離散空間。在我看來,ggplot強化了真正應該成爲美學選擇的東西。 – geotheory

+0

'ggradar'可能有用,但是.. – geotheory

回答

2

以直線連接數據點的極座標圖也稱爲雷達圖

Erwan Le Pennec的文章:From Parallel Plot to Radar Plot處理這個問題創建一個與ggplot2雷達圖。

他建議使用定義爲coord_radar()

coord_radar <- function (theta = "x", start = 0, direction = 1) { 
    theta <- match.arg(theta, c("x", "y")) 
    r <- if (theta == "x") "y" else "x" 
    ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start, 
      direction = sign(direction), 
      is_linear = function(coord) TRUE) 
} 

有了這個,我們可以創建情節如下:

library(tidyr) 
library(dplyr) 
library(ggplot2) 

iris %>% gather(dim, val, -Species) %>% 
    group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
    ggplot(aes(dim, val, group=Species, col=Species)) + 
    geom_line(size=2) + coord_radar() 

enter image description here

coord_radar()ggiraphExtra包的一部分。所以,你可以直接使用它

iris %>% gather(dim, val, -Species) %>% 
     group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
     ggplot(aes(dim, val, group=Species, col=Species)) + 
     geom_line(size=2) + ggiraphExtra:::coord_radar() 

注意coord_radar()不被包導出。所以,需要三重冒號(:::)來訪問該函數。

+0

熱門答案!你有沒有機會參與'ggiraphExtra'? – geotheory

+1

@geotheory我很高興找到解決方案。不,我不參與'ggiraphExtra'。首先,我搜索了「直線coord_polar」,並找到了Erwan Le Pennec的論文,其中給了Hadley Wickham'coord_radar()'。然後,我試圖找到對Hadley的引用,但是我以[ RDocumentation]中的'ggiraphExtra'包中的[coord_radar()'鏈接結束了(https://www.rdocumentation.org/packages/ggiraphExtra/versions/ 0.1.0/topics/coord_radar) – Uwe

+0

只注意到'geom_polygon'不需要這個解決方法。但這仍然非常需要線/路徑。 – geotheory