Я использовал library("sos"); findFn("{SI prefix}")
для поиска пакета sitools
.
Построить данные:
bytes <- 2^seq(0,20) + rnorm(21, 4, 2)
time <- bytes/(1e4 + rnorm(21, 100, 3)) + 8
my_data <- data.frame(time, bytes)
Загружать пакеты:
library("sitools")
library("ggplot2")
Создать сюжет:
(p <- ggplot(data=my_data, aes(x=bytes, y=time)) +
geom_point() +
geom_line() +
scale_x_log10("Message Size [Byte]", labels=f2si) +
scale_y_continuous("Round-Trip-Time [us]"))
Я не уверен, как это сравнивается с вашей функцией, но, по крайней мере, кто-то другой столкнулся с проблемой написания этого документа ...
Я изменил ваш стиль кода немного - точки с запятой на концах строк являются безвредными, но обычно являются признаком кодера MATLAB или C ...
edit: Первоначально я определил общую функцию форматирования
si_format <- function(...) {
function(x) f2si(x,...)
}
, следуя формату (например) scales::comma_format
, но в этом случае это кажется ненужным - только часть более глубокой магии ggplot2
, которую я не совсем понимаю.
Код OP дает то, что кажется мне не совсем правильным ответом: самый правый тик оси - «1000K», а не «1M» - это можно исправить, изменив тест >1e6
на >=1e6
. С другой стороны, f2si
использует нижний регистр k
- я не знаю, требуется ли K
(обертывание результатов в toupper()
может исправить это.)
Результаты OP (si_vec
):
[/g0]
Мои результаты (f2si
):
[/g1]