2014-12-05 12 views
6

Czy ktoś wie, jak to zrobić w R? Oznacza to, że reprezentują to cykliczne dane z lewego wykresu na prawy wykres?Wizualizacja szeregów czasowych w spiralach za pomocą R lub Python?

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

enter image description here

Oto przykładowe dane.

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

W ggplot, użyj 'coord_polar'. – Gregor

+0

Nie jest dla mnie oczywiste, w jaki sposób, jesteś pewien, że jest to możliwe dzięki tej strukturze paneli? – robertevansanders

Odpowiedz

9

To wydaje się dość blisko:

# 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 ... Bardzo ładnie. Dziękujemy za udostępnienie tego pomysłu. – jazzurro

7

wiem, jak to zrobić w Pythonie. Uważam, że działka z matplotlib jest dobra do tego typu rzeczy. Oto przykład:

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() 

można zmienić period do zmiany liczby obrotów w spiralę. a i b wykreślić spiralę, podczas gdy z zawiera rzeczywiste dane (w tym przykładzie fala sinusoidalna).

Example

+0

, więc każda spirala reprezentuje inny dzień w twoim przykładzie? – robertevansanders

+0

Celowo wybrałem okres, który synchronizuje okres fali sinusoidalnej dla moich fikcyjnych danych. Dla prawdziwych danych wybierz okres, który najlepiej spełnia Twoje potrzeby. Możesz zrobić 1 rewolucję dziennie, lub możesz wybrać okres, który prowadzi do najlepszego wyrównania danych (tak jak ja to zrobiłem), może to być wykorzystane do znalezienia okresowości w danych. –

Powiązane problemy