R - ggplot条形图,基线不从零开始

时间:2015-12-05 12:35:24

标签: r ggplot2

我正在使用ggplot2中的geom_bar在一个躲闪的条形图中绘制8个条件的平均值。我的y轴从-200变为1000.8个条件中的两个具有负值,其余的具有正值。目前,正值的条形从0开始。我希望所有条形从-200开始(即从-200填充到它们各自的值)。有没有一种简单的方法来实现这一目标?

graph <-  ggplot(data=data, aes(x, y, fill = z)) + 
      geom_bar(stat="identity", position = "dodge", width = 0.4) +
      scale_y_continuous(limits = c(-200, 1000), breaks =c(-200,0,200,400,600,800,1000), expand = c(0,0))

x有8种手段(4,423,-57,724,14,556,37,614)

我希望每个柱子从-200到它们的平均值(200到4,-200到423等等)填充。目前,酒吧从0填充到他们的平均值。我怎么能改变这个?

由于

1 个答案:

答案 0 :(得分:0)

对于基线为-200而不是零的条形图,您可以将y值加200,然后重新标记y轴,使标签比“默认”标签小200。您尚未提供样本数据,因此请告诉我这是不是您正在寻找的内容。

# Fake data (adapted from @lawyeR)
x <- rep(c("AA", "BB", "CC", "DD"), 2) 
y <- c(4, 423, -57, 724, 14, 556, 37, 614) 
z <- rep(c("A", "B", "C", "D"), 2) 
data <- data.frame(x=factor(x), y=y, z=z) 

library(dplyr)

# Add a grouping variable for dodging multiple bars with the same x value
data = data %>% group_by(x) %>%
  arrange(y) %>%
  mutate(dodgeGroup = 1:n())

ggplot(data=data, aes(x, y + 200, fill = z, group=dodgeGroup)) + 
  geom_bar(stat="identity", position = "dodge", width = 0.5,
           colour="grey20", lwd=0.3) + 
  scale_y_continuous(limits = c(-200,1000), breaks=seq(-200,1000,200),
                     labels=seq(-200,1000,200) - 200)

enter image description here