iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0

萬事具備,就欠東風

某種程度上來說,雖然Julia目前所擁有的生物資訊相關套件並沒有R或是Python來的多,但無法很快地吸引很多朋友來跟著學習使用這個新語言最大的點,應該是對使用Julia來繪圖這點比較難以習慣吧~ 我今天看了一下目前Julia底下提供的繪圖工具主要有:PlotsGRGadflyPyPlotVegaLite以及Plot.ly這幾種,當然還有很多其他的工具,這邊就不多提了。雖然有這麼多選擇,但對我們搞生物資訊的人來說仍嫌不足。舉例說:我想畫個Ideogram來看看在個染色體上一些重要生物特徵的分佈,像這樣: Ideogram
就沒有馬上可使用的工具。又或者說,我們常會畫一種稱為Circos的圖,來顯示在某物種的每個染色體上各種豐富的資訊(見下圖),在Julia當中我也沒有找到對應的工具,。
Circos

那有沒有辦法在Julia裡頭直接嵌入R code呢?

Yes! We can! 我確實可以透過一個稱為Rcall.jl的package來作到這件事,因此從此在Julia裡頭,就再也不用擔心畫圖的問題啦!

  • 安裝RCall.jl
julia> using Pkg
julia> Pkg.add("RCall.jl")
  • 另外先安裝好R底下畫Circos plot的好工具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)

如此,大家應該就可以看到這樣的圖了:
circos

RCall.jl確實提供了一個非常方便的界面讓R與Julia兩種語言能夠很方便的溝通,這又增加了我想要將Julia學好的動機了!


上一篇
[Day 11] 使用Julia處理Fastq/SAM/BAM/VCF/BED/GTF檔
下一篇
昨晚的Julia Taiwan Meetup與今早的北-BiO Meetup
系列文
When Bioinfo met Julia: Bioinformatician的30天Julia學習之路32

尚未有邦友留言

立即登入留言