2013-12-17 3 views
0

Я совершенно не знаком с R.
У меня есть данные профиля профиля профиля, которые предварительно обработаны и объединены. Похож на этого ("exp.txt")R) Создать двухмерную диаграмму MDS

 STUDY_1_CANCER_1 STUDY_1_CON_1 STUDY_2_CANCER_1 STUDY_2_CANCER_2 
P53 1.111    1.22    1.3    1.4 
..... 

Кроме того, я создал данные о фенотипе. Выглядит облегченный это («pheno.txt»)

Sample    Disease  Study 
STUDY_1_CANCER_1  Cancer   GSE1 
STUDY_1_CON_1  Normal   GSE1 
STUDY_2_CANCER_1  Cancer   GSE2 
STUDY_2_CON_1  Normal   GSE2 

Здесь я попытался сделать МДС сюжет, используя классическую команду cmdscale, как это.

data=read.table("exp.txt", row.names=1, header=T) 
DATA=as.matrix(data) 
pc=cor(DATA, method="p") 
mds=cmdscale(as.dist(1-pc),2) 
plot(mds) 

enter image description here

Я хотел бы создать сюжет, как эта фигура с цветом двойной маркировки (изучение и болезней). Как мне это сделать?

ответ

1

Сначала создайте пустой сюжет, затем добавьте точки с указанными цветами/фигурами.

Вот пример:

require(vegan) 
data(dune) 
data(dune.env) 

mds <- cmdscale(vegdist(dune, method='bray')) 


# set colors and shapes 
cols = c('red', 'blue', 'black', 'steelblue') 
shps = c(15, 16, 17) 
# empty plot 
plot(mds, type = 'n') 
# add points 
points(mds, col = cols[dune.env$Management], pch = shps[dune.env$Use]) 
# add legend 
legend('topright', col=cols, legend=levels(dune.env$Management), pch = 16, cex = 0.7) 
legend('bottomright', legend=levels(dune.env$Use), pch = shps, cex = 0.7) 

Обратите внимание, что факторы внутренне кодируются как целые числа, что полезно здесь.

> levels(dune.env$Management) 
[1] "BF" "HF" "NM" "SF" 

так

cols[dune.env$Management] 

займет первое вхождение cols для первых уровней факторов. Аналогично для разных форм.

Наконец-то добавьте легенду. Конечно, этот сюжет все еще нуждается в некоторой полировке, но вот путь ...

BTW: У Гевина Симпсона есть хороший blogpost о настройке орфографических сюжетов.

enter image description here

1

На самом деле, вы можете сделать это прямо в неплатеже plot команду, которая может принимать pch и col аргументы как векторы. Использование:

with(data, plot(mds, col = as.numeric(Study), pch = as.numeric(Disease), asp = 1) 

Вы необходимо использовать asp = 1, когда вы участка cmdscale результаты: обе оси должны быть расширены аналогично. Вы также можете добавить аргументы xlab и ylab для более удобных меток оси. Для добавления легенды и выбора графиков символов и цветов см. Другие ответы.

Смежные вопросы