Построение нескольких спектров с разными цветами в объекте hyperSpec

Я пытаюсь построить несколько спектров на одном графике, причем каждый спектр имеет разные цвета. Я использую объект «hyperSpec» из пакета hyperSpec и ggplot2. Мой набор данных довольно большой, но часть его выглядит так:

> dataTable
     1_6-5p.asc 1_6-25p.asc 1_6-50p.asc 1_6-75p.asc 1_6-95p.asc
4000   98.35901    97.04647    98.65234    99.17536    97.11173
3999   98.35578    97.04401    98.65169    99.17371    97.11437
3998   98.35255    97.03779    98.65102    99.17253    97.11699
3997   98.34935    97.03048    98.65038    99.17188    97.12239
3996   98.34452    97.02479    98.64652    99.17108    97.12877
3995   98.33943    97.02187    98.64160    99.16943    97.13389
3994   98.33523    97.02140    98.63806    99.16646    97.13641
3993   98.33336    97.02289    98.63696    99.16242    97.13630
3992   98.33389    97.02617    98.63755    99.15876    97.13475
3991   98.33560    97.03071    98.63850    99.15775    97.13349
3990   98.33731    97.03488    98.63908    99.16082    97.13384
3989   98.33895    97.03685    98.63897    99.16680    97.13568
3988   98.34147    97.03625    98.63773    99.17248    97.13708
3987   98.34556    97.03472    98.63520    99.17517    97.13553
3986   98.35042    97.03425    98.63230    99.17450    97.13028
3985   98.35414    97.03502    98.63068    99.17167    97.12378
3984   98.35526    97.03520    98.63142    99.16771    97.12050
3983   98.35411    97.03351    98.63443    99.16319    97.12381
3982   98.35249    97.03137    98.63891    99.15940    97.13368
3981   98.35214    97.03208    98.64386    99.15863    97.14675

Мой код для построения графика:

> spc <- new('hyperSpec',dataTable)
> p <- qplotspc(spc)
> p <- p + scale_x_reverse()
> print(p)

Я пытался добавить scale_x_manual с пользовательскими цветами, но не смог заставить его работать, я новичок в ggplot.

Пожалуйста, помогите и спасибо!!!


person Mohammed Khan    schedule 10.01.2015    source источник
comment
Похоже, что hyperSpec рассматривает каждую строку как отдельный спектр, а не каждый столбец. Это правильно?   -  person eipi10    schedule 10.01.2015
comment
Это верно, я также пытался использовать ggplot() без преобразования таблицы в объект «hyperSpec» с отдельным geom_line() для каждого спектра, но это также дает тот же результат, и я все еще не могу добавить цвета.   -  person Mohammed Khan    schedule 11.01.2015


Ответы (1)


Давайте попробуем использовать ggplot2 напрямую, так как это даст нам максимальную гибкость:

library(ggplot2)
library(reshape2) # For melt function

# Turn rownames into a data column
dataTable$x = as.numeric(rownames(dataTable))

# melt using x (the former rownames) as the ID variable
dataTable.m = melt(dataTable, id.var="x")

ggplot(dataTable.m, aes(x, value, colour=variable, group=variable)) +
  geom_line() + geom_point() +
  scale_x_reverse()

colour указывает ggplot присвоить каждому значению variable (который является идентификатором спектра) отдельный цвет. group сообщает ggplot, что каждый спектр должен быть построен отдельной линией. Вы можете сделать гораздо больше настроек, но это основная идея.

введите здесь описание изображения

person eipi10    schedule 11.01.2015
comment
Спасибо за ответ, но я ищу ось X, и легенда переключилась, поэтому пять имен файлов будут как 5 разных линейных графиков на одном графике, а ось X будет 4000,3999,3998. ,3997 и т.д. - person Mohammed Khan; 11.01.2015
comment
Я получаю предупреждающее сообщение Warning message: In dataTable$x = as.numeric(rownames(dataTable)) : Coercing LHS to a list, а также Error in eval(expr, envir, enclos) : object 'x' not found - person Mohammed Khan; 11.01.2015
comment
Извините, неважно, у меня была dataTable в качестве матрицы. Мне пришлось изменить dataTable на фрейм данных, тогда все заработало отлично. Спасибо!!! - person Mohammed Khan; 11.01.2015