Я пытаюсь отобразить числовые значения на оси диаграммы 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)