Попытка создать график со стрелками в R, но не может применить дискретные значения к непрерывной шкале - PullRequest
0 голосов
/ 13 декабря 2018

Мой набор данных представлен в виде таблицы, созданной в praat, которая содержит столбцы f220, f120, f280 и f180.Под каждым из них находится измерение, связанное с конкретным словом, так что слово в строке 1 будет иметь уникальные значения f220, f120, f280 и f180.Моя цель - построить стрелку от x1 = f220 y1 = f120 до x2 = f280 y2 = f180.Это моя таблица:

this is my table

Однако всякий раз, когда я пытаюсь использовать f220, f120, f280 или f180 в ggplot, измерения рассматриваются как дискретныеценности, а не в непрерывном масштабе.Я считаю, что содержание каждой ячейки рассматривается как фактор, а не числовое значение.Я уже пытался использовать 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") 

, но ось не масштабируется, плюс я не могу установить какие-либо ограничения или повернуть ось, получив ошибку «дискретное значение передано в непрерывный масштаб».Вот что происходит:

this is what happens

Я могу получить то, что хочу, вручную создав фрейм данных с упорядоченной парой всех соответствующих значений,однако, поскольку это отнимает много времени, и мне нужно сделать это для более 100 наборов данных, я бы предпочел не просто копировать и вставлять числа.Это ручной фрейм данных (это правильный график через фрейм данных):

this is the correct graph via the data frame

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)

В предыдущем проекте я смогчтобы построить точечный график, используя следующий код, где «story» - похожая таблица, сгенерированная 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% для представлениядвижение гласного в артикуляционном пространстве.У меня никогда не было проблем в этом предыдущем проекте, и я понятия не имею, почему мои цифры рассматриваются как факторы в текущем.

Любая помощь в получении правильной таблицы без необходимости ручного ввода значений во фрейм данных будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 декабря 2018

Проблема заключалась в попытке использовать as.numeric(x) вместо as.numeric(as.character(x)), как предложил Мариус.

...