这就是我的意思:
library(scales)
dat <- read.csv("~/Downloads/bench.csv",stringsAsFactors = TRUE)
dat$Time1 <- ifelse(dat$Phase %in% c('Decode','Deserialize'),-dat$Time,dat$Time)
up <- dat[dat$Time1 >= 0,]
down <- dat[dat$Time1 < 0,]
commapos <- function(x, ...) {
format(abs(x), big.mark = ",", trim = TRUE,
scientific = FALSE, ...)
}
ggplot() +
geom_bar(data = up,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") +
geom_bar(data = down,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") +
scale_y_continuous(labels = commapos) +
coord_flip()
commapos
当我做类似的事情时,我实际上只是从我自己现有的代码中获取的格式化程序。您可能不想要那种精确的格式,但这abs(x)
是关键部分。
另外,请注意您的 Phase 变量是一个字符/因子,因此为了从您的原始颜色条中获取颜色条,我必须强制返回整数。
而且,正如我提到的,当使用小于零的值时,ggplot 会抱怨堆叠定义不明确。如果您在不将数据框分成正/负值的情况下尝试此操作,您就会明白原因。