Как изменить числовой формат оси на диаграмме аккордов R на 1k, 2k и т. Д.? - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь отобразить числовые значения на оси диаграммы R-аккордов, чтобы тысячи были представлены символом k. Например, 1000 будет отображаться как 1K, 2000 будет отображать 2k и т. Д. Кто-нибудь может посоветовать, как и / или возможно ли это?

Я создал следующую функцию для преобразования числовых входов в эту 'k', но я не могу правильно его реализовать в части аккордов Ciros.trackPlotRegion.

Сначала я создал функцию для этого преобразования:

require(sitools)
f2si2 <- function(number,rounding=F){

  lut <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12, 1e-09, 1e-06, 
           0.001, 1, 1000, 1e+06, 1e+09, 1e+12, 1e+15, 1e+18, 1e+21, 
           1e+24)

  pre <- c("y", "z", "a", "f", "p", "n", "u", "m", "", "k", 
           "M", "G", "T", "P", "E", "Z", "Y")

  ix <- findInterval(number, lut)

  if (lut[ix]!=1) {
    if (rounding==T) {
      sistring <- paste(round(number/lut[ix]), pre[ix])
    } else {
      sistring <- paste(number/lut[ix], pre[ix])
    }

  }else{
    sistring <- as.character(number)
  }

  return(sistring)

}

Как я могуиспользуйте вышеуказанную функцию (или что-либо еще) в функции circos.axis () #, чтобы она преобразовывала вывод в 1k и т. д.?

# Here's some very crude code as an example. I'd want the 1000 to read #1k,  
10000 to read 10k, etc. along the axis. 

library(circlize)


# create test data
mat = matrix(1:200, 10, 20)
rownames(mat) = paste0("S", 1:10)
colnames(mat) = paste0("E", 1:20)

# create chord diagram
circos.par(canvas.ylim=c(-1.5, 1.5), 
           track.margin = c(0.01, 0))

chordDiagram(mat, annotationTrack = "grid") #, grid.col = grid.col)

circos.trackPlotRegion(track.index = 1, panel.fun = function(x, y) {
  xlim = get.cell.meta.data("xlim")
  ylim = get.cell.meta.data("ylim")
  sector.name = get.cell.meta.data("sector.index")
  # print axis  
  circos.axis(h = "top", labels.cex = 0.7, major.tick.percentage = 0.2 
              , sector.index = sector.name, track.index = 1)

  # print sector label
  circos.text(mean(xlim), ylim[1] + 3, sector.name, facing = "clockwise",
              niceFacing = TRUE, adj = c(0, 0.5)) 
}, bg.border = NA)

Diagram

...