Это моя первая публикация здесь, я надеюсь, что мой вопрос ясен и уместен.У меня есть набор данных, глава которого выглядит так:
wl ex421 wl ex309 wl ex284 wl ex347
1 431 0.6168224 321 0.1267943 301 0.06392694 361 0.15220484
2 432 0.6687435 322 0.2416268 302 0.05631659 362 0.08961593
3 433 0.6583593 323 0.4665072 303 0.05327245 363 0.13134187
4 434 0.6832814 324 0.3576555 304 0.00000000 364 0.32432432
5 435 0.6427830 325 0.2194976 305 0.12328767 365 0.50308203
6 436 0.7393562 326 0.1866029 306 0.08675799 366 0.34660977
и так далее.Столбцы 'wl' представляют длину волны, и существует четыре различных диапазона.Другие четыре столбца представляют измерения (нормализованные), выполненные в диапазонах «wl».Диапазоны тоже разной длины.Все они частично перекрываются где-то посередине набора данных.Чего мне нужно добиться, так это графика, показывающего все четыре набора данных «ex ###» на одном и том же наборе оси и нанесенных на график в соответствующих диапазонах.Ось X должна соответствовать всем четырем диапазонам 'wl'.Тем не менее, я пока не преуспел.
Когда в прошлом мне приходилось строить несколько наборов данных, подобных этой, я просто сливал данные, и это всегда работало.Примерно так:
df_melt <- melt(df, id.var = 'wl')
И тогда я бы нарисовал это так:
fluor_plt <- ggplot(fluor_ref2_melt, aes(x=wl,y=value,color=variable)) +
geom_point(shape = 1, fill = NA) + geom_path(data = fluor_ref2_melt,size = 1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
scale_colour_manual(values = colvec)
Однако, потому что у меня есть несколько столбцов с именем 'wl', которые также имеют разныедиапазоны, то, что случается, - то, что R только берет первый столбец 'wl' и отбрасывает все другие.Затем он в основном сдвигает все значения 'ex ###' в этот диапазон, используя индекс строки ... так что я получаю график следующего кадра:
wl ex421 ex309 ex284 ex347
1 431 0.6168224 0.1267943 0.06392694 0.15220484
2 432 0.6687435 0.2416268 0.05631659 0.08961593
3 433 0.6583593 0.4665072 0.05327245 0.13134187
4 434 0.6832814 0.3576555 0.00000000 0.32432432
5 435 0.6427830 0.2194976 0.12328767 0.50308203
6 436 0.7393562 0.1866029 0.08675799 0.34660977
Излишне говорить, что это полностьюнеправильно ... Итак, один из способов обойти проблему - перейти в Excel и вручную переместить столбцы вверх и вниз, чтобы в кадре данных каждая строка соответствовала одному значению 'wl', независимо от того, есть ли связанные с ним измеренные значения илине.Это избавило от «сдвига» значений, но R по-прежнему отбрасывает столбцы «wl» после первого.Вместо того, чтобы получить совершенно неправильный сюжет, я получаю правильный раздел.Первый набор наблюдений (ex421) нанесен на весь его диапазон;части других видны там, где диапазоны перекрываются.Я смотрел на некоторые подобные случаи, о которых спрашивали здесь в прошлом, например: Измените кадр данных с широкого на длинный с повторяющимися именами столбцов в R .Но я новичок в R и не думаю, что смог бы полностью понять предложенные решения.Мне не удалось изменить мои данные так, как я хочу, чтобы они были изменены (сохраняя разные диапазоны 'wl' для разных наборов), и я понятия не имел, какие аргументы дать ggplot впоследствии.Я пытался использовать data.table, но тогда я не знаю, что дать его для value.name и variable.name.Повторюсь, что я хочу достичь, это то, что можно было бы получить, построив четыре набора данных в электронной таблице, создав один точечный график в Excel и добавив к нему четыре различных ряда.
Любая информация будет принята с благодарностью!