-
Notifications
You must be signed in to change notification settings - Fork 0
/
Circos.Rnw
259 lines (178 loc) · 8.05 KB
/
Circos.Rnw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
\documentclass[a4paper,spanish]{article}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\usepackage{float}
\title{Visualización de datos genómicos: \textit{circos plot}}
\author{Said Muñoz Montero}
\begin{document}
\SweaveOpts{concordance=TRUE,prefix.string=plot, eps = FALSE, pdf = TRUE, keep.source=TRUE}
\maketitle
\section{Gráfico de circos}
Uno de los retos para el análisis de datos genómicos radica en la visualización de los datos. Especialmente cuando se tienen datos de diferentes plataformas, es posible generar una gran cantidad de gráficos que por separado no logran ser muy claras.
Una forma sencilla y simple de generar un gráfico de datos genómicos es a través de un gráfico de circos, creado por Martin Kryzywinski. Originalmente los gráficos \textit{circos} fueron desarrollados por \href{https://circos.ca/}{Circos}, este tipo de gráficos no está limitado a información genómica.\cite{krzywinski2009circos}
Los \textit{circos} son especialmente útiles para visualizar datos relacionales con múltiples dimensiones. En el caso de las ciencias ómicas, cada año se aumenta la complejidad en el análisis de los seres vivos, desde genómica, transcriptómica, proteómica, metiloma, etc. El gráfico \textit{circos} permite mostrar un panorama integrativo de muchas de estas plataformas.
\begin{figure}[H]
\centering
\includegraphics{circos_example}
\caption{A) Histograma. B) Ideograma. C)Histograma (invertido). D) \textit{Heatmap}. E) \textit{Links}. F) Resaltados. G) Grids. H) Ticks.}
\end{figure}
Se observa en la figura anterior los diferentes tipos de gráficos que se pueden presentar en un gráfico \textit{circos}. El usuario es libre de elegir lo que más se ajuste al tipo de datos con el que cuente.
Usualmente los circos plot se hacen con Perl, generando una serie de archivos de configuración antes de ver el gráfico. Esta tarea puede ser muy pesada, por lo que se mostrarán dos ejemplos usando \textit{R}.
\subsection{Ejemplo 1}
\label{ejemplo1}
En esta sección aprenderemos las bases de un gráfico de circos utilizando los paquetes de Bioconductor: OmicCircos y RCircos.
Cargamos las librerías que se utilizarán. En caso de que no estén instaladas:
<<eval=FALSE>>=
source("http://bioconductor.org/biocLite.R")
biocLite("RCircos")
biocLite("OmicCircos")
@
<<echo=True>>=
library("OmicCircos")
library("RCircos")
@
Utilizaremos la referencia para el humano llamada "hg19".
<<>>=
data("UCSC.hg19.chr")
head(UCSC.hg19.chr)
@
Se puede observar la estructura de los datos (dataframe), donde las columnas corresponden a: cromosoma, posición inicial, posición final, nombre de la región y tinción, respectivamente.
Para el primer gráfico necesitamos especificar ciertos parámetros:
\textit{\textbf{chr.exclude}} es una variable, normalmente en forma de vector para indicar los cromosomas que se desean excluir del circos plot.
<<>>=
chr.exclude <- NULL
@
\textit{\textbf{cyto.info}} contiene el \textit{dataframe} con la información del genoma que se graficará. Para este ejemplo, la referencia del humano.
<<>>=
cyto.info <- UCSC.hg19.chr
@
\textit{\textbf{tracks.inside}} indica el número de capas que se graficarán dentro del circos.
<<>>=
tracks.inside <- 1
@
\textit{\textbf{tracks.outside}} indica el número de capas que se graficarán afuera del circos.
<<>>=
tracks.outside <- 0
@
Con la función \textit{RCircos.Set.Core.Components} se configura el entorno gráfico.
<<>>=
RCircos.Set.Core.Components(cyto.info, chr.exclude, tracks.inside, tracks.outside);
@
Utilizaremos también un dataset de \textit{RCircos}.
<<>>=
data("RCircos.Link.Data")
head(RCircos.Link.Data)
@
Guardamos nuestro gráfico en formato PDF con el siguiente código.
<<echo=true,fig=false>>=
out.file <- "RCircosHelloWorld.pdf";
pdf(file=out.file, height=8, width=8, compress=TRUE);
@
Para empezar a dibujar el circos ejecutamos:
<<>>=
RCircos.Set.Plot.Area();
@
Posteriormente se grafica el ideograma (cariotipo):
<<>>=
RCircos.Chromosome.Ideogram.Plot();
@
Los \textit{links} se grafican usando:
<<>>=
RCircos.Link.Plot(RCircos.Link.Data, 1, TRUE)
@
Para poder guardar todo el gráfico en el PDF:
<<>>=
dev.off()
@
El resultado de todo este primer ejemplo es:
\begin{figure}[H]
\centering
<<echo=false,fig=true>>=
RCircos.Set.Plot.Area();
RCircos.Chromosome.Ideogram.Plot();
RCircos.Link.Plot(RCircos.Link.Data, 1, TRUE)
@
\caption{Circos plot con Links}
\end{figure}
\subsection{Ejemplo 2}
Para este ejemplo revisaremos el ejemplo de un patógeno intracelular, \textit{Leishmania mexicana}.
Este organismo cuenta con 34 cromosomas y presenta patrones de expresión, número de copias y genes de fusión muy interesantes.
Dicho esto, utilizamos el genoma de referencia de \textit{Leishmania mexicana}.
En la carpeta de este tutorial se provee el archivo "karyotype.txt".
<<echo=TRUE,fig=FALSE>>=
LmexicanaKaryotype<-read.table("karyotype.txt",header=T)
head(LmexicanaKaryotype)
@
Se puede observar una estructura similar al cariotipo humano que se muestra en el ejemplo \ref{ejemplo1}.
Para este ejemplo tenemos que cambiar los parámetros por defecto de las funciones de RCircos.
<<>>=
rcircos.params <- RCircos.Get.Plot.Parameters()
@
Se modifican las unidades cromosómicas ya que el genoma de \textit{Lmexicana} es más chico al humano. Definimos una unidad cromosómica como 10kbases.
<<>>=
rcircos.params$base.per.unit <- 10000;
@
De igual forma se ajustan otros parámetros del gráfico.
<<>>=
rcircos.params$chrom.paddings<-10
RCircos.Set.Core.Components(LmexicanaKaryotype, chr.exclude, tracks.inside, tracks.outside );
RCircos.Reset.Plot.Parameters(rcircos.params);
chr.exclude <- NULL;
tracks.inside <- 3;
tracks.outside <- 0;
@
Al igual que en ejemplo \ref{ejemplo1}, generamos un gráfico de cariotipo.
<<echo=true,fig=false,eval=false>>=
RCircos.Set.Plot.Area();
RCircos.Chromosome.Ideogram.Plot();
@
Con \textit{read.table} se carga la matriz de expresión, se observa la estructura de estos datos: cromosoma, posición inicial, posición final y nivel de expresión.
<<echo=true,fig=false,eval=True>>=
expresion=read.table("expresion.txt",header=T)
head(expresion)
@
Con \textit{RCircos.Line.Plot} se hace una gráfica con los datos de expresión en la primer capa.
<<echo=true,fig=false,eval=false>>=
RCircos.Line.Plot(expresion,data.col = 4,track.num = 1,side="in")
@
El archivo "snp.txt", contiene la densidad de mutaciones puntuales promedio en cada cromosoma, esto podría dar una idea del número de copias global de cada cromosoma en este organismo.
<<echo=true,fig=false,eval=True>>=
snp=read.table("snp.txt",header=TRUE)
head(snp)
@
\textit{RCircos.Histogram.Plot} graficará los histogramas de los datos de mutaciones puntuales por cada cromosoma.
<<echo=true,fig=false,eval=false>>=
RCircos.Histogram.Plot(snp,data.col=4,track.num=2,side="in")
@
Con secuenciación masiva se lograron determinar genes de fusión en la muestra, se muestran algunos en el archivo "fusiones.txt", y lo graficamos con la misma función usada en el ejemplo \ref{ejemplo1}.
<<echo=true,fig=false,eval=True>>=
fusiones<-read.table("fusiones.txt",header=TRUE)
head(fusiones)
@
<<echo=true,fig=false,eval=false>>=
RCircos.Link.Plot(fusiones, 3, TRUE);
@
El resultado es el siguiente:
\begin{figure}[H]
\centering
<<plotlm,echo=false,fig=True>>=
RCircos.Set.Plot.Area();
RCircos.Chromosome.Ideogram.Plot();
expresion=read.table("expresion.txt",header=T)
RCircos.Line.Plot(expresion,data.col = 4,track.num = 1,side="in")
snp=read.table("snp.txt",header=TRUE)
RCircos.Histogram.Plot(snp,data.col=4,track.num=2,side="in")
fusiones<-read.table("fusiones.txt",header=TRUE)
RCircos.Link.Plot(fusiones, 3, TRUE);
@
\caption{Circos plot para \textit{Leishmania mexicana}}
\end{figure}
\section{Conclusiones}
RCircos es una gran herramienta para generar gráficos exploratorios, sin embargo para generar gráficos más completos se pueden revisar otras implementaciones de Circos plot.
Los gráficos de circos permiten atacar el problema de visualización que aqueja a las ómicas.
\bibliography{bibliography}
\bibliographystyle{plain}
\nocite{*}
\end{document}