2017-03-02 88 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