使用R或Python在螺旋中可视化时间序列?

时间:2014-12-05 21:34:52

标签: python r visualization data-visualization

有谁知道如何在R中这样做?也就是说,从左图到右图表示这个周期性数据?

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

2 个答案:

答案 0 :(得分:10)

这似乎非常接近:

# 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 :(得分: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以更改螺旋中的转数。 ab绘制螺旋,而z包含实际数据(在此示例中为正弦波)。

Example