我正在尝试创建比值比的条形图。解释性地,它们以1为中心而不是0.因此,我想要一个条形图,其中低于1的值是"否定"并且高于1的值是"肯定的" (即距离1的距离图)。
实际上,图表应如下图所示,但y轴上的标签应以1为中心,而不是0。
我想创建这个图不是y轴的重新标记,而是实际上以1为中心。这是可能的吗?如果是的话,怎么样?
创建示例图的代码:
data <- matrix(c(rnorm(5, 1, .5)), 5, 1)
data <- as.data.frame(data)
data[,2] <- data[,1] - .1
data[,3] <- data[,1] + .1
data <- cbind(c(letters[1:5]), data)
names(data) <- c("Category", "OR", "Lower", "Upper")
data.zero <- cbind("Category"=data[,1], data[,2:4] - 1)
require(ggplot2)
ggplot() +
geom_bar(data = data.zero, aes(x=Category, y=OR, fill=Category), stat = "identity") +
scale_fill_brewer(type = "seq", palette = 1) +
geom_errorbar(aes(x=Category, y=OR, ymin=Lower, ymax=Upper),
width=.1, position=position_dodge(), data=data.zero)
答案 0 :(得分:1)
定义一个简单的函数来添加1,如下所示:
plus1_formatter <- function(x) {x +1}
然后添加字符串
+ scale_y_continuous(labels=plus1_formatter)
上面的ggplot命令。
使其可重现集seed(123)
之前:
后:
答案 1 :(得分:0)
如果我正确理解了你的问题,你不想重新标记y轴,你希望它以1为中心。
## Find the minimum and maximum y
mi <- min(data.zero$Lower)
ma <- max(data.zero$Upper)
现在我检查哪个距离更大,从1到mi或从1到ma。我通过增加距离1的较小距离来设置ylim。
if(1 - mi > ma - 1) {
newylim <- c(mi , 2 - mi) ## Lower limit remains same, Upper limit is increased
} else {
newylim <- c(2 - ma, ma) ## Upper limit remains same, Lower limit is decreased
}
然后你可以添加:
+ ylim(newylim)
您的代码的图表位于左侧,并在右侧添加了ylim
。
希望它有所帮助,
亚历