【问题标题】:Plotting colored (heat) circular segments with R's 'shape' package (or some other package?)用 R 的“形状”包(或其他包?)绘制彩色(热)圆段
【发布时间】:2011-10-30 19:49:34
【问题描述】:

我需要创建一个方位角/距离颜色编码图,如使用“形状”包的后续代码。


library(shape)
emptyplot(xlim=c(-5,10), main="color segment test case")

filledcircle(r1=1, r2=2, from=0, to=pi/6, col=intpalette(c("blue", "yellow","red"),    numcol = 100),
val=(cbind(c(0,1),c(.0,.0))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=1, r2=2, from=pi/6, to=2*pi/6, col=intpalette(c("blue", "yellow","red"),   numcol = 100), 
val=(cbind(c(0,1),c(.1,.1))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=1, r2=2, from=2*pi/6, to=3*pi/6, col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.2,.2))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=1, r2=2, from=3*pi/6, to=4*pi/6, col=intpalette(c("blue", "yellow","red"), numcol = 100), 
val=(cbind(c(0,1),c(.3,.3))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=1, r2=2, from=4*pi/6, to=5*pi/6, col=intpalette(c("blue", "yellow","red"), numcol = 100), 
val=(cbind(c(0,1),c(.4,.4))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=1, r2=2, from=5*pi/6, to=6*pi/6, col=intpalette(c("blue",   "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.5,.5))), zlim=c(0,1),  mid=c(0.0,0.0))

filledcircle(r1=2, r2=3, from=0, to=pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.6,.6))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=2, r2=3, from=pi/6, to=2*pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.7,.7))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=2, r2=3, from=2*pi/6, to=3*pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.8,.8))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=2, r2=3, from=3*pi/6, to=4*pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.9,.9))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=2, r2=3, from=4*pi/6, to=5*pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.99,.99))), zlim=c(0,1), mid=c(0.0,0.0))
filledcircle(r1=2, r2=3, from=5*pi/6, to=6*pi/6,col=intpalette(c("blue", "yellow","red"), numcol = 100),
val=(cbind(c(0,1),c(.8,.8))), zlim=c(0,1), mid=c(0.0,0.0))

segments(0,0,3,0)
segments(0,0,2.6,1.5)
segments(0,0,1.5,2.6)
segments(0,0,0,3)
segments(0,0,-1.5,2.6)
segments(0,0,-2.6,1.5)
segments(0,0,-3,0)

plotcircle(r=1, from=0, to=pi, lwd=1)
plotcircle(r=2, from=0, to=pi, lwd=1)
plotcircle(r=3, from=0, to=pi, lwd=1)

这个绘图的真实世界示例需要大约十个或更多半径,并且可能需要绘图的另一半,甚至可能需要更精细的方位角范围。这将需要几十行代码。

此图类似于风玫瑰图,并且各种 R 包(一个是 climatol)执行类似的操作,但与此图完全不同。我查看了 CircStats、circle、NeatMap、ggplot2 和 climatol,但似乎没有任何内容符合要求。

有没有人知道另一个 R 包可以通过提供数据框或数字矩阵和调色板定义来创建这种绘图?

【问题讨论】:

    标签: r


    【解决方案1】:

    这种类型的情节当然可以使用ggplot2。引用coord_polar的帮助页面:

    library(ggplot2)
    data(movies)
    movies$rrating <- cut_interval(movies$rating, length = 1) 
    movies$budgetq <- cut_number(movies$budget, 4)
    doh <- ggplot(movies, aes(x = rrating, fill = budgetq))
    doh + geom_bar(width = 0.9, position = "fill") + coord_polar(theta = "y")
    

    【讨论】:

    • Andrie,我在 Hadley 的 ggplot2 书的第 136 页和第 137 页上看到了对极坐标的引用,但第 137 页上的示例显示并没有给出您的示例,所以我没有看任何更远。我得再看看。谢谢。
    猜你喜欢
    • 2019-09-26
    • 2021-09-28
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多