**更新:**找到了一个针对R中plot()
函数的粗略解决方案,但它会从更好的图中受益。有什么想法吗?这是另一个层次的绘图,但潜在的,向增加厚度的过渡可能是渐进的。
我有一个简单的R Dataframe 。
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
我想把它画出来,当线重叠时,它们相对于有多少条线来说更粗。因此,对于value从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中有一些工具可以制作更好的图形。
3条答案
按热度按时间euoag5mw1#
这是一个通过改变线条透明度的快速绘图。
g9icjywg2#
我想出了一个粗糙的解决方案,使用规则的情节。如果有人有一个解决方案,使一个更好的情节,例如。有了ggplot,我真的很乐意学习。也许ggplot中不同级别的透明度可以做到这一点。
使用更真实的数据,这个粗糙的解决方案变得有点不稳定,线宽难以感知。
ybzsozfc3#
我也被这个问题绊倒了。我用ggplot用频率作为线段的宽度来解决它。
如果您只有两个时间点,则更简单:
如果这被认为是“一个更好的情节”,这是个人的判断。