मैं अक्सर बाइट्स से संबंधित कुछ मापों के लिए जीएनयू आर/जीजीप्लॉट में आलेखों को प्लॉट करता हूं। बिल्टिन अक्ष लेबल या तो सादे संख्या या वैज्ञानिक नोटेशन हैं, यानी 1 मेगाबाइट = 1e6। मैं एसआई उपसर्ग (किलो = 1e3, मेगा = 1e6, गीगा = 1e9, आदि) की बजाय, यानी अक्ष को 1.5K, 5K, 1M, 150M, 4G आदि लेबल किया जाना चाहिएggplot2 अक्ष लेबल में एसआई उपसर्ग
मैं वर्तमान में निम्न कोड का उपयोग करता हूं:
si_num <- function (x) {
if (!is.na(x)) {
if (x > 1e6) {
chrs <- strsplit(format(x, scientific=12), split="")[[1]];
rem <- chrs[seq(1,length(chrs)-6)];
rem <- append(rem, "M");
}
else if (x > 1e3) {
chrs <- strsplit(format(x, scientific=12), split="")[[1]];
rem <- chrs[seq(1,length(chrs)-3)];
rem <- append(rem, "K");
}
else {
return(x);
}
return(paste(rem, sep="", collapse=""));
}
else return(NA);
}
si_vec <- function(x) {
sapply(x, FUN=si_num);
}
library("ggplot2");
bytes=2^seq(0,20) + rnorm(21, 4, 2);
time=bytes/(1e4 + rnorm(21, 100, 3)) + 8;
my_data = data.frame(time, bytes);
p <- ggplot(data=my_data, aes(x=bytes, y=time)) +
geom_point() +
geom_line() +
scale_x_log10("Message Size [Byte]", labels=si_vec) +
scale_y_continuous("Round-Trip-Time [us]");
p;
मैं अगर इस समाधान सुधार किया जा सकता जानना चाहते हैं, के रूप में मेरे एक हर ग्राफ में बॉयलरप्लेट कोड का एक बहुत आवश्यकता है चाहते हैं।
आप 'utils ::: print.object_size' – James