某種程度上來說,雖然Julia目前所擁有的生物資訊相關套件並沒有R或是Python來的多,但無法很快地吸引很多朋友來跟著學習使用這個新語言最大的點,應該是對使用Julia來繪圖
這點比較難以習慣吧~ 我今天看了一下目前Julia底下提供的繪圖工具主要有:Plots、GR、Gadfly、PyPlot、VegaLite以及Plot.ly這幾種,當然還有很多其他的工具,這邊就不多提了。雖然有這麼多選擇,但對我們搞生物資訊的人來說仍嫌不足。舉例說:我想畫個Ideogram
來看看在個染色體上一些重要生物特徵的分佈,像這樣:
就沒有馬上可使用的工具。又或者說,我們常會畫一種稱為Circos
的圖,來顯示在某物種的每個染色體上各種豐富的資訊(見下圖),在Julia當中我也沒有找到對應的工具,。
Yes! We can! 我確實可以透過一個稱為Rcall.jl
的package來作到這件事,因此從此在Julia裡頭,就再也不用擔心畫圖的問題啦!
RCall.jl
julia> using Pkg
julia> Pkg.add("RCall.jl")
circlize
> BiocManager::install("circlize")
circlize
裡頭最簡單的範例來示範一下結合Julia跟R來畫Circos plot
## 讀檔
julia> using DataFrames
julia> using CSV
julia> using RCall
julia> DF = CSV.read("df.csv", header = 1, delim = ",")
1000×3 DataFrame
│ Row │ factors │ x │ y │
│ │ String⍰ │ Float64⍰ │ Float64⍰ │
├──────┼─────────┼────────────┼────────────┤
│ 1 │ c │ -0.0517236 │ 0.00861818 │
│ 2 │ b │ 2.1637 │ 0.679114 │
│ 3 │ e │ -1.18025 │ 0.348648 │
│ 4 │ e │ 0.944762 │ 0.260648 │
│ 5 │ f │ 0.898058 │ 0.102245 │
│ 6 │ a │ -1.86478 │ 0.534374 │
│ 7 │ d │ 1.1074 │ 0.0270984 │
│ 8 │ g │ 1.32381 │ 0.608184 │
│ 9 │ d │ -0.0589713 │ 0.632474 │
⋮
│ 991 │ h │ 1.04797 │ 0.771412 │
│ 992 │ g │ -0.964536 │ 0.674213 │
│ 993 │ a │ 1.43917 │ 0.508944 │
│ 994 │ f │ 1.19044 │ 0.0218269 │
│ 995 │ e │ -0.375284 │ 0.374477 │
│ 996 │ a │ -0.114018 │ 0.43598 │
│ 997 │ h │ 0.587676 │ 0.270354 │
│ 998 │ b │ 0.511487 │ 0.325257 │
│ 999 │ a │ -0.275564 │ 0.162053 │
│ 1000 │ d │ 0.607297 │ 0.958432 │
## 將這筆數據丟進R環境中
julia> @rput DF
## 按 $ 進入 R 環境
R> head(DF)
factors x y
1 c -0.0517236 0.008618185
2 b 2.1636962 0.679113609
3 e -1.1802519 0.348647571
4 e 0.9447616 0.260648123
5 f 0.8980578 0.102244650
6 a -1.8647842 0.534374046
R> library(circlize)
R> circos.par("track.height" = 0.1)
R> circos.initialize(factors = DF$factors, x = DF$x)
R> circos.track(factors = DF$factors, y = DF$y,
panel.fun = function(x, y) {
circos.text(CELL_META$xcenter, CELL_META$cell.ylim[2] + uy(5, "mm"), CELL_META$sector.index)
circos.axis(labels.cex = 0.6)
})
R> col = rep(c("#FF0000", "#00FF00"), 4)
R> circos.trackPoints(DF$factors, DF$x, DF$y, col = col, pch = 16, cex = 0.5)
R> circos.text(-1, 0.5, "text", sector.index = "a", track.index = 1)
R> bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)
R> circos.trackHist(dF$factors, DF$x, bin.size = 0.2, bg.col = bgcol, col = NA)
如此,大家應該就可以看到這樣的圖了:
RCall.jl
確實提供了一個非常方便的界面讓R與Julia兩種語言能夠很方便的溝通,這又增加了我想要將Julia學好的動機了!