2014-12-05 2 views
6

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

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

enter image description here

Вот некоторые примеры данных.

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

В ggplot, используйте 'coord_polar'. – Gregor

+0

Это не очевидно для меня, как вы уверены, что это возможно с этой структурой панели? – robertevansanders

ответ

9

Это кажется довольно близко:

# 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

Ничего себе ... Очень приятно. Спасибо, что разделили эту идею. – jazzurro

7

Я знаю, как сделать это в Python. Я нахожу график рассеяния от matplotlib хорошо для такого рода вещей. Вот пример:

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

Вы можете изменить period для изменения числа оборотов в спирали. a и b запишите спираль, пока z содержит фактические данные (в данном примере синусоида).

Example

+0

поэтому каждая спираль представляет собой другой день в вашем примере? – robertevansanders

+0

Я сознательно выбрал период, который синхронизирует период синусоиды для моих фиктивных данных. Для реальных данных вы бы выбрали период, который наилучшим образом соответствует вашим потребностям. Вы можете сделать это 1 оборот в день, или вы можете выбрать период, который приведет к лучшему выравниванию данных (как я это сделал), это можно использовать для поиска периодичности в данных. –

Смежные вопросы