我可以轻松地使用ggplot2绘制如下图:
事实上,对于我的数据,它如下所示:
degree value 1 120 0.50 2 30 0.20 3 -120 0.20 4 60 0.50 5 150 0.40 6 -90 0.14 7 -60 0.50 8 0 0.60
第一列是度数(从-180到180或从0到360),第二列是相应的值。所以我想用(0,0)绘制一个图形点到箭头的每个数据点,但是如下所示:
2 http://www.matrixlab-examples.com/image-files/polar_plots_1.gif
我尝试使用以下代码:
base <- ggplot(polar, aes(x=degree, y=value))
p <- base + coord_polar()
p <- p + geom_segment(aes(x=0, y=0, xend=degree, yend=value ), arrow=arrow(length=unit(0.3,"cm")) )
print(p)
它产生了一个极坐标图,但我没有得到从(0,0)到我的数据点的直箭头。
我也尝试使用plotrix包绘制此图。它的工作原理如下:
3 http://rgm2.lab.nig.ac.jp/RGM_results/plotrix:polar.plot/polar.plot_001_med.png
我无法在此图表中导入箭头。
如何使用plotrix包添加箭头,或者如何使用ggplot2绘制它?
答案 0 :(得分:12)
设置数据(来自dput
):
polar <- structure(list(degree = c(120L, 30L, -120L, 60L, 150L, -90L,
-60L, 0L), value = c(0.5, 0.2, 0.2, 0.5, 0.4, 0.14, 0.5, 0.6)), .Names = c("degree",
"value"), class = "data.frame", row.names = c(NA, -8L))
您可以非常轻松地获得直线 - 您只需要确保您的细分受众群从degree
而不是0开始:
library(ggplot2)
base <- ggplot(polar, aes(x=degree, y=value))
p <- base + coord_polar()
p+ geom_segment(aes(y=0, xend=degree, yend=value))
但是,添加箭头会使它看起来像是一个错误(?) - 在计算箭头的角度时不会考虑坐标变换:
library(grid)
p+ geom_segment(aes(y=0, xend=degree, yend=value) ,
arrow=arrow(length=unit(0.3,"cm")))
你可以通过绘制自己的箭头来解决这个问题:
awid <- 2
p + geom_segment(aes(y=0, xend=degree, yend=value))+
geom_segment(aes(y=value-0.05,yend=value,x=degree-awid/value,xend=degree))+
geom_segment(aes(y=value-0.05,yend=value,x=degree+awid/value,xend=degree))
如果仔细观察,可以看到箭头不是完全笔直的(如果你使awid
更大,效果会更明显。)