2014-10-03 3 views
0

У меня есть диапазон значений от -0.10100 до 0.28400 (всего 120 значений). Эти значения представляют собой экспрессию гена 120 генов. В моей сети они представляют собой взаимодействующие гены TGFB1. Я пытаюсь построить свою сеть, используя библиотеку igraph. Я хотел бы иметь два эффекта на цвета моего узла: первый заключается в том, чтобы: покрасить мои узлы в соответствии с выражением выражения гена в greenred (зеленые отрицательные значения и красные положительные) в соответствии с диапазоном значений представляющие мои атрибуты. Затем, я хотел бы сделать прозрачными краснозонные узлы в диапазоне от -0.10100 до 0.04720. Поскольку я не эксперт R, я сталкиваюсь с проблемами, которые имеют так много эффектов в моей сети. Может ли кто-нибудь мне помочь?цвета узла igraph в соответствии с атрибутами значений выражения гена

Мои попытки:

tmp1= read.delim("mynet.txt", header= T) 
g <- graph.data.frame(tmp1, directed=FALSE) 
V(g)$name 
[1] "COL6A3" "PDGFRB" "COL3A1" "COL5A1" "LOXL1" .... 

g 
GRAPH UN-- 120 120 -- 
+ attr: name (v/c), GEX (v/c), color (v/c) 

tmp2= read.delim("myattributes.txt", header= T) 
GENE  S2N  
COL6A3  0.28400 
PDGFRB  0.28100 
COL3A1  0.26300 
......  .......  
V(g)$GEX=as.numeric(tmp2$S2N[match(V(g)$name,tmp2$GENE)]) 
V(g)$color=V(g)$GEX   

Тогда, к сожалению, я остановился, и я не смог продолжить игру. Может ли кто-нибудь мне помочь?

Лучшие

+1

Можете ли вы предоставить свои данные? – jlhoward

ответ

0

Вероятно, это не является оптимальным решением, но позволяет увидеть, если это полезно для вас. В принципе, вам нужно назначить цвет V(g)$color, а не номер, который вы сейчас делаете. Мое решение состоит в том, чтобы определять интервалы по вашим непрерывным данным и назначать цвет каждому из интервалов. Для сопоставления ваших непрерывных данных (т. Е. Df $ S2N) с категориальными данными вы можете использовать cut. Вот пример:

library(igraph) 
library(org.Hs.eg.db) # Bioconductor annotation package for human. 

set.seed(123) 

# create toy network: 
g <- barabasi.game(10, directed = FALSE) 

# assign random gene ids. 
V(g)$name <- sample(keys(org.Hs.eg.db), 10) 

# assign the gene symbol to the label attribute: 
V(g)$label <- select(org.Hs.eg.db, keys = V(g)$name, columns="SYMBOL")$SYMBOL 
plot(g) 

# generate toy dataset: 
df <- data.frame(GENE=V(g)$label, S2N=sample(seq(-2,2,.1),10,replace=TRUE)) 

# if you are plotting e.g. fold changes, you may want dark blue for 
# FC between -2 and -1, blue for FC between -1 and -.5, grey for -.5 and .5, and so on. 
# define colors: 
col <- c("darkblue", "blue", "grey", "orange", "red") 

# map your continuous data to the intervals you want: 
(colc <- cut(df$S2N, breaks = c(-2, -1, -.5, .5, 1, 2), include.lowest = TRUE)) 

[1] (-1,-0.5] (0.5,1] (-0.5,0.5] (1,2]  (0.5,1] (-0.5,0.5] 
[7] (-0.5,0.5] (1,2]  (1,2]  [-2,-1] 
Levels: [-2,-1] (-1,-0.5] (-0.5,0.5] (0.5,1] (1,2] 

# assign the colors to the network 
V(g)$color=col[colc] 
plot(g) 

Обратите внимание, что keys и select взяты из AnnotationDbi пакета, который обрабатывает аннотации в org.Hs.eg.db (это зависимость), но в противном случае не нужно. Вот только для примера.

+0

Потенциальным * оптимальным * решением было бы отображение непрерывных данных в некоторый градиентный масштаб. – ddiez

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