2014-12-05 16 views
6

Weiß jemand, wie man das in R macht? Das heißt, stellen Sie diese zyklischen Daten von der linken Grafik zur rechten Grafik dar?Zeitreihen in Spiralen mit R oder Python visualisieren?

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

enter image description here

Hier einige Beispieldaten.

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 verwenden 'coord_polar'. – Gregor

+0

Es ist mir nicht klar, wie, sind Sie sicher, dass es mit dieser Panel-Struktur möglich ist? – robertevansanders

Antwort

9

Dies scheint ziemlich nahe:

# 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 ... Sehr schön. Danke für das Teilen dieser Idee. – jazzurro

7

Ich weiß, wie dies in Python zu tun. Ich finde das Streudiagramm von Matplotlib gut für diese Art von Dingen. Hier ein Beispiel:

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

Sie können period ändern, um die Anzahl der Umdrehungen in der Spirale zu ändern. a und b zeichnen Sie die Spirale, während z die tatsächlichen Daten enthält (in diesem Beispiel eine Sinuswelle).

Example

+0

also stellt jede Spirale einen anderen Tag in Ihrem Beispiel dar? – robertevansanders

+0

Ich habe absichtlich einen Zeitraum gewählt, der die Sinuswelle für meine Dummy-Daten synchronisiert. Für echte Daten würden Sie einen Zeitraum wählen, der Ihren Bedürfnissen am besten entspricht. Sie könnten diese 1 Umdrehung pro Tag machen, oder Sie könnten einen Zeitraum wählen, der zu der besten Datenausrichtung führt (wie ich es getan habe), dies kann verwendet werden, um Periodizität in den Daten zu finden. –

Verwandte Themen