Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R图根据频率改变线厚度_R_Ggplot2_Plot - Fatal编程技术网

R图根据频率改变线厚度

R图根据频率改变线厚度,r,ggplot2,plot,R,Ggplot2,Plot,更新:找到了一个粗糙的解决方案,该解决方案特定于R中的plot()函数,但它将受益于更好的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)) >

更新:找到了一个粗糙的解决方案,该解决方案特定于R中的
plot()
函数,但它将受益于更好的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
dft
行时间值
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
6x20.5
7 X2 t3 1.0
8 X2 t4 1.0
9×3 t1 0.0
10x3t20.0
11×3 t3 1.0
12×3 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

transitions我想出了一个使用常规绘图的粗略解决方案。如果有人有一个更好的解决方案,例如使用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] )

df这是一个通过改变线条透明度的快速绘图


dft$x您能否显示绘图的外观。像这样的<代码>绘图(如.numeric(dft$time),dft$value,type=“l”)
。谢谢!我的意思是将X1、X2和X3作为直线,将生成作为x轴,并为直线绘制值,收敛过渡变厚(更新Q)。只是想出了一个粗略的解决方案,并张贴在下面。但如果你知道如何提高产量,我将不胜感激。谢谢!有没有办法把厚度和透明度结合起来?实际数据的问题是频率在1到20之间变化,厚度可能是显示这一点的有用方法。这个解决方案非常有用!也许有可能以某种方式抖动线条,使它们不会完全重叠,从而允许线条之间存在更明显的差异?
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)