更新:找到了一个特定于R中plot()
函数的粗略解决方案,但它可以从更好的情节中受益。有任何想法吗?这是另一个绘图水平,但潜在地,向厚度增加的过渡可能是渐进的。
我在R中有一个简单的数据框。
dft <- data.frame(line=c(rep("X1",4),rep("X2",4),rep("X3",4)),+
time=rep(c("t1","t2","t3","t4"),3), value=c(0,1,1,1,0,0.5,1,1,0,0,1,1))
> dft
line time value
1 X1 t1 0.0
2 X1 t2 1.0
3 X1 t3 1.0
4 X1 t4 1.0
5 X2 t1 0.0
6 X2 t2 0.5
7 X2 t3 1.0
8 X2 t4 1.0
9 X3 t1 0.0
10 X3 t2 0.0
11 X3 t3 1.0
12 X3 t4 1.0
我想这样绘制,每当线条重叠时,它们相对于有多少条线条而言更厚。因此,当值从1开始并以1结束时,如果更多行在同一时间点具有相同的转换,则该行将更粗。
相同的数据也可以表示为过渡频率
transitions <- data.frame(line=character(), generation=character(), t0=numeric(),t1=numeric())
for (line in unique(dft$line)){
for (number in 1:3) {
generation= c("t1","t2","t3","t4")[number]
generation2= c("t1","t2","t3","t4")[number+1]
transitions <- rbind(transitions, data.frame(line=line, generation=generation, t0=dft[dft$line == line & dft$time == generation ,]$value, t1=dft[dft$line == line & dft$time == generation2 ,]$value))
}
}
> transitions
line generation t0 t1
1 X1 t1 0.0 1.0
2 X1 t2 1.0 1.0
3 X1 t3 1.0 1.0
4 X2 t1 0.0 0.5
5 X2 t2 0.5 1.0
6 X2 t3 1.0 1.0
7 X3 t1 0.0 0.0
8 X3 t2 0.0 1.0
9 X3 t3 1.0 1.0
这听起来像是一个常见的问题。我确实找到了如何改变厚度的答案,但实际上不是基于频率。谁能指出我正确的方向?谢谢!
更新:最后,每条线(X1,X2,X3)应经过时间t1:t4跟踪,x轴上的时间和y轴上的值。如下图所示(使用下面的初步解决方案生成)。也许R中的工具可以制作更好的图形。
答案 0 :(得分:2)
通过更改线条的透明度,这里是一个快速绘图。
dft$x <- dft$time
levels(dft$x) <- 0:3
dft$x <- as.numeric(dft$x)
ggplot(dft, aes(x, value, group=line)) + geom_line(size=1, alpha=0.15)
答案 1 :(得分:1)
我想出了一个使用常规情节的原始解决方案。如果有人有一个解决方案可以创造一个更好的情节,例如和ggplot一起,我真的很乐意学习。也许ggplot中不同级别的透明度可以解决问题。
df<-ddply(transitions,.(generation,t0,t1),nrow)
levels(df$generation) <- c(0,1,2,3)
df$generationnr <- as.numeric(as.character(df$generation))
plot(1:1, 1:1, lwd = 1, type = 'l', xlim = c(0,3), ylim = c(0,1))
for (item in 1:nrow(df))
lines(c(df$generationnr[item],(df$generationnr[item]+1)),+
c(df$t0[item],df$t1[item]),lwd=df$V1[item] )