R 使用循环包创建半极坐标图(玫瑰图)

R 使用循环包创建半极坐标图(玫瑰图),r,polar-coordinates,R,Polar Coordinates,我正在使用圆形库中的rose.diag函数绘制角度分布图。输入数据是辐射度。我的MWE代码是 library(circular); dat<-read.csv(file.choose(),header=F); data=unlist(dat); rose.diag(data, bins=24) 库(循环); dat也许您可以先使用默认的绘图函数绘制不带分布的半圆。然后填写不带圆圈的分布: library(circular) data<- c(-0.

我正在使用
圆形
库中的
rose.diag
函数绘制角度分布图。输入数据是辐射度。我的MWE代码是

    library(circular);
    dat<-read.csv(file.choose(),header=F);
    data=unlist(dat);
    rose.diag(data, bins=24)
库(循环);

dat也许您可以先使用默认的绘图函数绘制不带分布的半圆。然后填写不带圆圈的分布:

library(circular)

data<- c(-0.188,-0.742,-0.953,-0.948,-0.953,-1.187,-0.9327200,-0.855,-  0.024,1.303,-1.041,-1.068,-1.066,1.442,1.150,0.965,0.665,0.649,0.984,-1.379,-0.584,-0.573,-0.357,-0.237,-0.287,-0.486,-0.783,-0.298,0.849,1.088,-1.003,-0.952,-0.776,-0.811,-0.880)

freq <- diff(colSums(outer( data %% (2*pi), (1:24)*pi/12,"<"))) / length(data)
r.max <- sqrt(max(freq))

#-----------------------------------------------------------------
# Plot the half circle:

lab.width  <- 0.15*r.max
lab.height <- 0.15*r.max

plot( c(-r.max,r.max), c(0,0),
      axes=FALSE,
      ylim=c(0,r.max+lab.height),
      xlim=c(-r.max-lab.width,r.max+lab.width),
      xlab="", ylab="", type="l")

for ( i in 0:(5*12-1) )
{
  psi <- i*pi/(5*12)
  x1 <- r.max*cos(psi)
  y1 <- r.max*sin(psi)
  x2 <- r.max*cos(psi+pi/(5*12))
  y2 <- r.max*sin(psi+pi/(5*12))

  lines( c(x1,x2), c(y1,y2), type="l")

  if (i %% 5 == 0) { lines( x1*c(1,0.95), y1*c(1,0.95), type="l" ) }
}

par(cex=2.0)

text( x = c(-r.max,0,r.max),
      y = c(0,r.max,0),
      labels = c("-pi/2","0","pi/2"),
      pos = c(2,3,4))

#------------------------------------------------------------
# Plot the distribution, but without the circle:

rose.diag(data,
          bins = 24,
          rotation = "clock",
          tcl.text = NA,
          ticks = FALSE,
          zero = pi/2,
          control.circle = circle.control( col="white" ),
          add = TRUE )
库(循环)

数据你为什么不把你的数据公布出来,这样人们可以更好地帮助你呢?谢谢你的回答。我已经编辑了这篇文章,添加了一个数据样本。很好。我编辑了你的问题并添加了另一个标签,希望能吸引一两个答案。这是个好主意!谢谢你的帮助。我还有最后一个问题:在外圈添加-pi/2,0,pi/2的最佳方式是什么?我已经编辑了我的答案。您可以使用
text
添加标签。非常感谢您宝贵的帮助,这将很好!
library(circular)

data<- c(-0.188,-0.742,-0.953,-0.948,-0.953,-1.187,-0.9327200,-0.855,-  0.024,1.303,-1.041,-1.068,-1.066,1.442,1.150,0.965,0.665,0.649,0.984,-1.379,-0.584,-0.573,-0.357,-0.237,-0.287,-0.486,-0.783,-0.298,0.849,1.088,-1.003,-0.952,-0.776,-0.811,-0.880)

freq <- diff(colSums(outer( data %% (2*pi), (1:24)*pi/12,"<"))) / length(data)
r.max <- sqrt(max(freq))

#-----------------------------------------------------------------
# Plot the half circle:

lab.width  <- 0.15*r.max
lab.height <- 0.15*r.max

plot( c(-r.max,r.max), c(0,0),
      axes=FALSE,
      ylim=c(0,r.max+lab.height),
      xlim=c(-r.max-lab.width,r.max+lab.width),
      xlab="", ylab="", type="l")

for ( i in 0:(5*12-1) )
{
  psi <- i*pi/(5*12)
  x1 <- r.max*cos(psi)
  y1 <- r.max*sin(psi)
  x2 <- r.max*cos(psi+pi/(5*12))
  y2 <- r.max*sin(psi+pi/(5*12))

  lines( c(x1,x2), c(y1,y2), type="l")

  if (i %% 5 == 0) { lines( x1*c(1,0.95), y1*c(1,0.95), type="l" ) }
}

par(cex=2.0)

text( x = c(-r.max,0,r.max),
      y = c(0,r.max,0),
      labels = c("-pi/2","0","pi/2"),
      pos = c(2,3,4))

#------------------------------------------------------------
# Plot the distribution, but without the circle:

rose.diag(data,
          bins = 24,
          rotation = "clock",
          tcl.text = NA,
          ticks = FALSE,
          zero = pi/2,
          control.circle = circle.control( col="white" ),
          add = TRUE )