Построение цветных (тепловых) круглых сегментов с пакетом «формы» R (или каким-либо другим пакетом?) - PullRequest
1 голос
/ 30 октября 2011

Мне нужно создать азимутальный / дистанционный цветовой график, как в следующем коде, использующем пакет 'shape'.


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, циркуляр, NeatMap, ggplot2 и climatol, и ничего там, кажется, не отвечает требованиям.

Кто-нибудь знает другой пакет R, который может создать этот тип графика, просто передав ему фрейм данных или матрицу чисел и определение цветовой палитры?

1 Ответ

5 голосов
/ 31 октября 2011

Этот тип графика, безусловно, возможен при использовании 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")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...