ggplot facet_wrap绘制每个绘图的行名称更改的位置

时间:2013-11-18 22:52:55

标签: r ggplot2

您好(来自R新手),

我正在使用单词识别的神经网络模型进行模拟。该模型基本上具有用于多个时间对准的词典中的每个单词的检测器(例如,实际上有67个“狗”检测器,在连续的时间点对齐)。因此,模拟的输出是一个文件,在模拟的每个时间步骤都会激活每个字检测器。因此,如果模拟运行100个循环,则该文件将具有针对所有67个狗单元的100个时间戳激活记录,并且对于词典中的每个其他单词具有相同的激活记录(例如,100×字x67个数据点)。我对词典中的每个单词进行了模拟运算,现在我想使用facet_wrap为每个模拟制作一个绘图,绘制10个激活最多的单词的超时激活。

我已经想出将该输出转换为时间X检测器矩阵,然后我通过每列的峰值激活对该矩阵进行排序。然后我删除除前10列之外的所有内容。对于像club这样的单词的单个模拟,我最终会看到这样的数据(只显示输出的头部只有4个字:

> head(traceOut.top[,c(1,2,3,4,12)])
  time kl^b.s3 kl^b.s4 klu.s3 Target
1    0   -0.01   -0.01  -0.01   kl^b
2    1   -0.01   -0.01  -0.01   kl^b
3    2   -0.01   -0.01  -0.01   kl^b
4    3   -0.01   -0.01  -0.01   kl^b
5    4   -0.01   -0.01  -0.01   kl^b
6    5   -0.01   -0.01  -0.01   kl^b

列名称表示单词detect + alignment。 “k1 ^ b.s3”表示切片3处的“球杆”(k1 ^ b)的检测器(激活在几十个时间步之后开始改变)。 “目标”列指示已为模型提供的输入。

然后我将数据融化:

> traceOut.m2 <-melt(as.data.frame(traceOut.top),id.vars=c("time","Target"),variable.name="Word")

> head(traceOut.m2)
  time Target    Word Activation
1     0   kl^b kl^b.s3      -0.01
2     1   kl^b kl^b.s3      -0.01
3     2   kl^b kl^b.s3      -0.01
4     3   kl^b kl^b.s3      -0.01
5     4   kl^b kl^b.s3      -0.01
6     5   kl^b kl^b.s3      -0.01

并将其绑定到名为traceOut.m2.all的data.frame,它最终为每个目标提供此类输出。

然后我尝试使用ggplot facet_wrap为每个单词制作一个情节:

ggplot(traceOut.m2.all, aes(time,Activation,color=Word, shape=Word) ) + 
  facet_wrap(~ Target) +   
  geom_line(aes(label=Word))

问题在于前10个单词检测器对于每个单词是不同的。我希望每个情节都有一个传奇,包括它的前10名。相反,会创建一个包含任何绘图中出现的所有单词检测器的图例。我确实需要每个图中的特定列名,所以我不能只将列名改为1,2,3..10之类的东西。有谁知道这样做的方法?

谢谢,

吉姆

1 个答案:

答案 0 :(得分:0)

好吧,我放弃了这一点 - 我认为这不可能。相反,当我读取每个文件时,我创建一个具有项目特定图例的ggplot对象,将其保存到列表中,然后在读取所有文件后创建一个多面板图。

E.g:

plotList[[length(plotList) + 1]]  <- ggplot(traceOut.m2, aes(time, Activation, color=Word) + geom_line(aes(label=Word))