2014-12-05 19 views
6

Qualcuno sa come farlo in R? Cioè, rappresentano questi dati ciclici dalla trama sinistra alla trama giusta?Visualizzare le serie temporali in spirali usando R o Python?

http://cs.lnu.se/isovis/courses/spring07/dac751/papers/TimeSpiralsInfoVis2001.pdf

enter image description here

Ecco alcuni dati di esempio.

Day = c(rep(1,5),rep(2,5),rep(3,5)) 
Hour = rep(1:5,3) 
Sunlight = c(0,1,2,3,0,1,2,3,2,1,0,0,4,2,1) 
data = cbind(Day,Hour,Sunlight) 

enter image description here

+0

In ggplot, usare 'coord_polar'. – Gregor

+0

Non è ovvio per me come, sei sicuro che sia possibile con questa struttura del pannello? – robertevansanders

risposta

9

Questo sembra piuttosto vicino:

# sample data - hourly for 10 days; daylight from roughly 6:00am to 6:00pm 
set.seed(1)  # for reproducibility 
Day <- c(rep(1:10,each=24)) 
Hour <- rep(1:24) 
data <- data.frame(Day,Hour) 
data$Sunlight <- with(data,-10*cos(2*pi*(Hour-1+abs(rnorm(240)))/24)) 
data$Sunlight[data$Sunlight<0] <- 0 

library(ggplot2) 
ggplot(data,aes(x=Hour,y=10+24*Day+Hour-1))+ 
    geom_tile(aes(color=Sunlight),size=2)+ 
    scale_color_gradient(low="black",high="yellow")+ 
    ylim(0,250)+ labs(y="",x="")+ 
    coord_polar(theta="x")+ 
    theme(panel.background=element_rect(fill="black"),panel.grid=element_blank(), 
     axis.text.y=element_blank(), axis.text.x=element_text(color="white"), 
     axis.ticks.y=element_blank()) 
+1

Wow ... Molto bello. Grazie per aver condiviso questa idea. – jazzurro

7

so come fare questo in Python. Trovo la trama a dispersione da matplotlib buona per questo genere di cose. Ecco un esempio:

import matplotlib.pyplot as plt 
import numpy as np 

period = 0.5 

f = np.arange(0, 100, 0.03) // Data range 
z = np.sin(f)    // Data 

a = f*np.sin(period*f); 
b = f*np.cos(period*f); 

fig = plt.figure() 
ax = plt.subplot(111) 
fig.add_subplot(ax) 
ax.scatter(a, b, c=z, s=100, edgecolors='none') 

plt.show() 

È possibile modificare period per modificare il numero di giri nella spirale. a e b tracciano la spirale mentre z contiene i dati effettivi (in questo esempio, un'onda sinusoidale).

Example

+0

quindi ogni spirale rappresenta un giorno diverso nell'esempio? – robertevansanders

+0

Ho scelto deliberatamente un punto che sincronizza il periodo dell'onda sinusoidale per i miei dati fittizi. Per i dati reali scegli un periodo che meglio soddisfa le tue esigenze. Potresti effettuare 1 giro al giorno oppure scegliere un periodo che porti al miglior allineamento dei dati (come ho fatto io), questo può essere usato per trovare la periodicità nei dati. –

Problemi correlati