我正在尝试可视化文本数据如何在句子中的各个位置分布。这是一些模拟数据:
range
对于情节,我首先创建一个虚拟框架:
<input
type="text"
ng-model="vm.rangeInput"
placeholder="enter range"
ng-keyup="$event.which === 13 && vm.addToRange()">
<br>
<br>
<select
class="width"
ng-change="vm.selectValueChanged()"
multiple
name="selectValue"
id="selectValue"
ng-model="vm.selectValue">
<option ng-value="i" ng-repeat="i in vm.range">{{i}}</option>
</select>
然后绘制虚拟框架的轮廓:
class HomeCtrl {
constructor($scope) {
'ngInject';
this.range = [];
this.rangeInput = '';
this.selectValue = '';
this.addToRange = () => {
const total = +this.rangeInput.split('-').reverse()[0];
this.range = Array(total).fill(1).map((x, y) => x + y);
this.rangeInput = '';
}
this.selectValueChanged = () => {
console.log(this.selectValue);
}
}
}
export default HomeCtrl;
现在,我想强调出现“ a”项的情况;为此,我定义了一个循环,并使用text()函数使用红色实线突出显示“ a”,然后将其他所有内容打印为灰色:
# create mock data:
dfmock <- data.frame(letter = c(sample(letters[1:3], 25, replace = T)),
position = c(rep(1, 5), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5))
)
在生成绘图时,每个位置显示的高光数量错误。我不能仅仅弄清楚为什么会这样。非常感谢您的帮助!
答案 0 :(得分:1)
我不是您想要的输出的100%,但是从上面的猜测可能会解决此问题:
使用代码设置虚拟数据帧
# create mock data:
dfmock <- data.frame(letter = c(sample(letters[1:3], 25, replace = T)),
position = c(rep(1, 5), rep(2, 5), rep(3, 5), rep(4, 5), rep(5, 5))
)
# create dummy data frame for plot:
dummytest <-data.frame(slots = 1:5, rows = 1:5)
再次绘制数据
# plot:
plot(dummytest$rows ~ dummytest$slots, type="n", frame=F, axes=F)
axis(1, at=seq(1:5), labels=unique(dfmock$position))
FIX:
似乎您的FOR循环正在遍历错误的数据,因此您的ifelse
返回的逻辑向量并不总是与绘图数据相同。
# print "a" in positions:
for(i in dfmock$position){
text(i, dummytest$rows, "___", cex=1.75,
col = ifelse(dfmock[dfmock$position==i,]$letter=="a", "red", "grey"))
}
这将产生以下dfmock的以下PLOT:
> dfmock[dfmock$letter=="a",]
letter position
4 a 1
8 a 2
12 a 3
13 a 3
14 a 3
21 a 5
25 a 5