我的数据集是在 praat 中制作的表格形式,其中包含 f220、f120、f280 和 f180 列。在每一个之下是与特定单词相关的度量,因此第 1 行中的单词将具有唯一的 f220、f120、f280 和 f180 值。我的目标是绘制一个从 x1=f220 y1=f120 到 x2=f280 y2=f180 的箭头。这是我的桌子:
但是,每当我尝试在 ggplot 中使用 f220、f120、f280 或 f180 时,它会将测量值视为离散值,而不是连续的。我相信每个单元格的内容都被视为一个因素而不是一个数值。我已经尝试过使用as.numeric()
,但是这返回了不正确的值。我确实得到了一个图表:
ggplot() +
geom_segment(data=ow, mapping=aes(x=f220, y=f120, xend=f280, yend=f180),
arrow=arrow(angle=5), size=.5, color="red")
但是轴没有缩放,而且我无法设置任何限制或反转轴,从而得到“提供给连续缩放的离散值”错误。这就是发生的事情:
我可以通过手动创建一个包含所有相关值的有序对的数据框来获得我想要的东西,但是由于这很耗时而且我需要为 100 多个数据集执行此操作,我宁愿找到一种方法不仅仅是复制和粘贴数字。这是手动数据框(这是通过数据框的正确图表):
dfow=data.frame(x=c(1126.519537,1034.584991,1277.922287,1304.417017,1312.378515,1336.947675,932.284623,1253.6823255372103,1291.853523,1184.573491), y=c(621.0741703,593.9790728,619.6623011,533.3008616,450.9261326,540.0055773,410.0854765,576.6145726,549.7064836,532.9992762), xv=c(1143.969311,1236.669227,1162.265314,1346.566912,1100.251361,1031.416842,1578.243306,1208.190102,1166.698588,1328.207814), yv=c(460.6605515,361.6829504,347.2567965,404.6473197,345.9352715,423.4654868,408.2602727,330.5207874,292.0723355,394.1734665))
ggplot() +
geom_segment(data=dfow, mapping=aes(x=x, y=y, xend=xv, yend=yv), arrow=arrow(angle=5),
size=.5, color="red") +
geom_point(data=dfow, mapping=aes(x=x, y=y), size=2, shape=2, color="red") +
scale_x_reverse() +
scale_y_reverse() +
xlab("F2(HZ)") +
ylab('F1(Hz)') +
xlim(2500, 500) +
ylim(800, 200)
在之前的项目中,我能够使用以下代码制作点图,其中“故事”是由 praat 生成的类似表格,但仅使用 f1 和 f2。
ggplot(story, aes(y=f1, x=f2)) +
geom_text(aes(label = class, color=class)) +
scale_x_reverse() +
scale_y_reverse() +
xlab("F2(HZ)") +
ylab('F1(Hz)')
我使用完全相同的 praat 脚本来创建两个表,除了当前显示的表被修改为具有两个 f1 和两个 f2 值(一个在元音的 20% 和一个在 80% 的元音),这样我就可以创建一个箭头20% 到 80% 点以表示元音在发音空间中的移动。我在之前的项目中从来没有遇到过任何麻烦,也不知道为什么我的数字被视为当前项目的一个因素。
对于能够获得正确表格而无需手动将值输入数据框的任何帮助,我们将不胜感激。