R中的玫瑰图

4
我想绘制一张玫瑰图来展示一些循环数据。我一直在使用包,这个包允许你使用函数绘制简单的玫瑰图。虽然这可以画出图表,但我想能够改进图表,但我找不到添加或微调图表的方法。我尝试使用绘制它,但这对我来说不太清晰,而且我也很难找到另一个R包来绘制这样的玫瑰图。
下面是我的数据样本和当前代码,以及我的问题:
Angle
0.65454759
0.01355458
0.5052027
0.2264302
-0.350552
-0.428481
0.1231778
0.258787
0.06723504
0.06906181
2.54608572
-1.6591672
3.00437314
-0.0503291
-0.828578
-1.9616418
-0.6468774
0.01438686
0.1162713
0.9938797
0.1861583
0.1547071
0.2577813
0.5110576
0.08714113

这些数据是弧度转角。使用 circular 包,我将这些数据转换成了一个 circular 类的向量:

x <- circular(Angle)

然后使用下面的代码绘制玫瑰图,其中以度为单位而不是弧度绘制图表:
rose.diag(x, pch = 16, cex = 1, axes = TRUE, shrink = 1, col=3, prop = 2, 
    bins=36, upper=TRUE, ticks=TRUE, units="degrees")

我希望在这张图中添加以下三个元素:

  1. 将图的方向更改为顶部为0而不是右侧为0。
  2. 在图上添加同心圆以帮助视觉解释每个“箱子”的大小和重量。
  3. 添加一条线来标识均值角度(如果可能的话,还要加上标准差误差棒)
1个回答

3

有几种方法可以做到这一点。在这个软件包中,rose.diag有一个“零”参数。

y <- scan() # paste in the values from the question and hit return twice
y <- circlar(y) # not necessary but prevents a warning
rose.diag(y, units = 'degrees', zero = pi/2) # units doesn't change the underlying units

或者,您可以设置创建的circular对象的属性。

y <- circlar(y, zero = pi/2)
rose.diag(y, units = 'degrees') # note, no 0 call here

所以,现在情节被旋转了...如何添加内容...
> par('usr')
[1] -1.376553  1.376553 -1.123200  1.123200

这给了我用户坐标,并告诉我用户空间中的绘图尺寸。现在我可以做一些事情,比如添加一个圆。

symbols(0, 0, circle = 0.2, inches = FALSE, add = TRUE, fg = 'red')

有一个lines.circular函数,但我不确定如何使用它。我也可以使用segmentsarrows命令绘制一条线并在图表上进行绘制。这需要一些欧几里得几何知识,将角度和线的长度转换为点。这应该能让你入门。

m <- mean.circle(y)
segments(0, 0, cos(m+pi/2), sin(m+pi/2), col = 'red') # note I need to add the new 0 position... there is a lines.circular function but it wasn't obvious to me how to use it.

(提示:在rose.diag中的框架圈的半径为1,因此将其提供给symbols中的circle参数将会在该点精确绘制)


太好了,谢谢。我没有意识到有一个“零”参数。还有两个问题:是否可以绘制x和y轴(连接0到180和90到270)?此外,您有任何想法如何将圆形误差线添加到平均线上吗? - James
segments命令可以绘制任何直线。您需要为曲线想法找出一个方程式。您以角度为单位确定起点和终点,然后根据角度和半径计算一系列欧几里得点。因此,如果角度从2到3,则只需在该角度范围内计算20个点。然后使用segments绘制所有小线条。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接