首页 > 解决方案 > 使用虚拟数据框设置文本数据的绘图区域

问题描述

我有大量的数据集,其中的话语以它们包含的单词数量来区分(4 个单词的话语、5 个单词的话语等)。每个数据集由恰好 1,000 个话语标记的样本组成,并存储在具有 3 个变量的数据框中:单词(“word”)、它们的语法标签(“c5”)和它们在轮换中的位置(“slot” ):

df <- data.frame(word, c5, slot)

我想做的是通过使用 text() 函数和颜色编码(例如,黑色表示感叹词,灰色表示任何其他单词类型)在散点图中绘制某些单词在其话语中的分布。为了设置绘图区域,我创建了一个带有两个变量的虚拟框架:行(用于话语中的单词)和槽(用于每个单词在话语中的位置)。例如,对于 10 个单词的话语样本:

dummy <- data.frame(rows = 1:1000, slots = 1:10)

然后我为此数据框设置了绘图区域,因此:

plot(dummy$rows ~ dummy$slots, type="n", axes =F)
axis(1, at=seq(1:10), labels=c("w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10"))

并用上述数据帧“df”中的数据填充插槽:

for(i in unique(df$slot)){
  text(i, 1:1000, "_____", cex=1.45,
       col = ifelse(df[df$slot==i,]$c5=="ITJ", "black", "grey"))
}

只要虚拟数据帧中的行是插槽的倍数,就可以正常工作。当它们不是时,问题就开始了,例如,在 7 个单词的情况下,我得到这个错误:

dummy <-data.frame(rows = 1:1000, slots = 1:7)
Error in data.frame(rows = 1:1000, slots = 1:7) : 
arguments imply differing number of rows: 1000, 7

尽管行和插槽之间不匹配,有没有办法为绘图设置虚拟数据框?

标签: rplottext

解决方案


在选择虚拟数据集的大小时,您必须更加慎重。一千不是七的倍数,这就是您收到错误的原因。看看下面的例子。在此示例中,在创建数据集之前,确定了第一个向量应该是多大。

# Settings
slotSize <- 7
desiredRows <- 1000

# Compute nr of repeats
nrRepeats <- round(desiredRows / slotSize, 0)
totalRows <- nrRepeats * slotSize

# Create dummy data
dummy <-data.frame(rows = 1:totalRows, slots = 1:slotSize)
head(dummy); tail(dummy)

这也可以在一行中完成,尽管它可能更难阅读。

# In one line
dummy <-data.frame(rows = c(1:(round((1000/slotSize),0) * slotSize)), slots = 1:slotSize)

希望这将使您更接近解决方案。


推荐阅读