2013-01-07 20 views
5

Utworzono różany diagram aspektów w stopniach dla danych o położeniu za pomocą pakietu "okrągłego" w R i funkcji rose.diag, z podstawowymi aspektami N , NE, E itd., Łącznie 8 pojemników. Jednak pojemniki nie obejmują aspektów. Innymi słowy, pierwszy bin idzie od 0-45, drugi od 45 do 90, i tak dalej, który łączy dane aspektu w dziwny sposób. Czy istnieje sposób na przesunięcie pojemników tak, aby 0, 45, 90 itd. Były środkiem pojemników, zamiast krawędzi?Jak przesuwać pojemniki na diagramie różanym za pomocą pakietu "okrągły" w R

rose.diag(Degrees$Degrees, bins=8,zero=pi/2, units = 'degrees', rotation='clock') 
+0

Nie sądzę, jest to możliwe bez włamania do kodu źródłowego. Wydaje mi się, że w pewnym momencie będę to robił, ale będę musiał wykopać kod ... –

+0

@BenBolker możliwe bez hackowania kodu źródłowego, ale z hackowania działki :) – agstudy

Odpowiedz

4

myślę Ben ma rację, że nie można zrobić łatwo z rose.diag, więc o to rozwiązanie wykorzystujące ggplot2:

library(ggplot2) 
Degrees <- runif(100, 0, 360) 
rose <- ggplot(mapping = aes(x = Degrees)) + 
    stat_bin(breaks = (0:8 - 0.5)/8 * 360) + 
    scale_x_continuous(
    breaks = 0:7/8*360, 
    labels = c("N", "NE", "E", "SE", "S", "SW", "W", "NW") 
    ) + 
    coord_polar(start=-pi/8) 
rose 

enter image description here To może nie być idealne, ponieważ nie wszystkie funkcje w rose.diag mają łatwe odpowiedniki w ggplot2.

+0

zobacz moją odpowiedź na awersję z 'rose.diag' – agstudy

+0

@ agstudy twoja odpowiedź pokazuje umiejętną manipulację surowymi elementami fabuły. Osobiście preferuję wygląd renderowania ggplot2 i łatwiej go modyfikować. – orizon

+0

nie. Odpowiadam tylko na pytanie dotyczące Op, aby przesunąć pojemniki. Może to, co zrobiłem, jest zręczne, ale wolę renderowanie :) – agstudy

1

Możesz mieć coś takiego używając pakietu gridBase. Wciąż używamy fabuły rose.diag i my hack, gdy znajdziemy się w przestrzeni dobrej rzutni.

enter image description here

require(grid) 
#grid.newpage() 
##generate some data 
x <- circular(runif(50, 0, 2*pi)) 
bins <- 8 
rotation <- 'clock' 
##tcl =0(no ticks), tcl.text=-2 to write away the ticks marks 
rose.diag(x, bins=bins,zero=0, rotation='clock', 
      tcl=0,tcl.text=-2,col='#80FF00FF') 
library(gridBase) 
## I use the plot viewport 
vp <- baseViewports()$plot 
pushViewport(vp)   ## here we go! 
## radial transformation 
at <- (0:bins - 0.5)/bins * 2 * pi 

## ticks 
grid.segments(x0 = .95*sin(at), y0 = 0.95*cos(at), 
       x1 = 1.05*sin(at), y1 = 1.05*cos(at), 
       default.units = "native") 
## ticks labels 
grid.text(x = 1.1*sin(at), default.units = "native", 
      y = 1.1*cos(at), gp=gpar(col='red'), 
      label = c("N", "NE", "E", "SE", "S", "SW", "W", "NW")) 

Dla aspektu wizualnego I dodać trochę strojenie, ale niektórzy już kod powyżej odpowiedź na pytanie.

## dashed lines from the center for visual aspect 
grid.segments(x0 = .95*sin(at), y0 = 0.95*cos(at), 
       x1 = 0, 0, 
       gp = gpar(lty="dashed"), 
       default.units = "native") 

## circle just to get the same color of text 
grid.circle(r=1,x=0,y=0,gp=gpar(col='red',fill=NA,lwd=2), default.units = "native") 
## remove the viewport 
popViewport(1) 
0

Dlaczego nie obrócić oryginalnych danych? N.b. poniżej cdat jest w stopniach (zero = pi/2), podczas gdy zero jest w 2 * pi

rose.diag (cdat - 10, pojemniki = 20, col = "ciemnozielone", prop = 1,3, osie = FALSE, dodatek = TRUE, zero = pi/2-pi/20)

Kopiowanie wklejanie coś/pracuję nad:

library(circular) 

raw <-read.csv("C:\\Users\\Andy\\Desktop\\business\\research\\Oxford\\MichelDish\\r.csv", header=T) 
raw <-na.omit(raw) 


cdat <- circular(raw [, c ("kandUnknown")],type="angles",units="degrees", rotation="clock", zero=pi/2) 


plot(cdat, cex=1.1, bin=720, stack=TRUE, sep=0.035, shrink=1.8, tcl.text=.2) 


ticks.circular(circular(seq(0,2*pi,pi/8)), zero=pi/2, rotation='clock', tcl=0.075) 



rose.diag(cdat - 10, bins = 20, col="darkgrey", prop=1.3, axes=FALSE, add=TRUE, zero = pi/2 - pi/20) 

lines(density.circular(cdat, bw=40), lwd=2, lty=1) 

enter image description here

nb Poniższy kod daje stary rysunek (u góry po lewej):

rose.diag(cdat, bins = 20, col="darkgrey", prop=1.3, axes=FALSE, add=TRUE) 

ps Dla ciekawskich, używamy takich statystyk dla np http://www.sciencedirect.com/science/article/pii/S0950329315001068