圆形图与R中的向量

fre*_*tal 15 plot r

我正在尝试创建一个圆形图,其中各种角度的矢量来自不同角度的原点:类似下图,尽管它不必相同.我凝视着circular,并circstats学到了很多关于循环图,但没有发现过像什么我要找的.我认为如果必须的话,我可以手工制作一些东西,但似乎有可能比我更有经验的人已经写了一些代码来做这件事.


该图来自Schmidt,2007,Ecology 88(11):2793-2802,图2C.

ags*_*udy 10

网格包非常强大,可用于组合和排列图形元素.

library(grid)
Run Code Online (Sandbox Code Playgroud)

结果如下: 在此输入图像描述 有些数据,我认为剩下的就是你的价值<1

polar <- read.table(text ='
degree value
1    120  0.50
2     30  0.20
3   160  0.20
4     35  0.50
5    150  0.40
6    90  0.14
7    70  0.50
8      20  0.60',header=T)


## function to create axis label
axis.text <- function(col,row,text,angle){
  pushViewport(viewport(layout.pos.col=col,layout.pos.row=row,just=c('top')))
  grid.text(angle,vjust=0) 
  grid.text(text,vjust=2)         
  popViewport()
}

## function to create the arrows, Here I use the data
arrow.custom <- function(polar){
  pushViewport(viewport(layout.pos.col=2,layout.pos.row=2))
  apply(polar,1,function(x){
       pushViewport(viewport(angle=x['degree']))  
          grid.segments(x0=0.5,y0=0.5,x1=0.5+x['value']*0.8,y1=0.5,
          arrow=arrow(type='closed'),gp=gpar(fill='grey'))
       popViewport()
  })
  popViewport()
}


## The global layout 3*3 matrix
lyt=grid.layout(3, 3, 
                   widths= unit(c(4,15,4), "lines"),
                   heights=unit(c(4,15,4), "lines"),
                   just='center')
pushViewport(viewport(layout=lyt,xscale=2*extendrange(polar$value)))
 ## the central part : circles , arrows and axes
pushViewport(viewport(layout.pos.col=2,layout.pos.row=2))
grid.circle(r=c(0.5,0.3),gp = gpar(ltw=c(3,2),col=c('black','grey')))
arrow.custom(polar)
grid.segments(x0=0.5,y0=0,x1=0.5,y=1,gp=gpar(col='grey'))
grid.segments(x0=0,y0=0.5,x1=1,y=0.5,gp=gpar(col='grey'))
popViewport()

## the axis labels 
axis.text(1,2,'Phragmites',expression(270 * degree))
axis.text(3,2,'Spartina',expression(90 * degree))
axis.text(2,1,'Increasing tropic position',expression(0 * degree))
axis.text(2,3,'Decreasing tropic position',expression(180 * degree))
Run Code Online (Sandbox Code Playgroud)


Mar*_*box 8

plotrix包HAL一个polar.plot似乎做你想要的功能.但是,我还没有弄清楚如何沿着其中一条边的圆弧添加虚线.

例:

library(plotrix)

testlen<-c(rnorm(36)*2+5)
testpos<-seq(0,350,by=10)
polar.plot(testlen,testpos,main="Test Polar Plot",lwd=3,line.col=4)

#rotate degree
oldpar<-polar.plot(testlen,testpos,main="Test Clockwise Polar Plot",
start=180,clockwise=TRUE,lwd=3,line.col=4)

# reset everything
par(oldpar)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述