これが私が意味することです:
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 はスタックが適切に定義されていないと文句を言います。データ フレームを正/負の値に分けずにこれを試すと、その理由がわかります。