ggplot2,如何在同一张图上应用两种比例尺?从上到下的条形图。

5

请查看图形:

enter image description here (来源:这里)

我如何使用ggplot2复制条形图的上半部分和下半部分?

例如,我可以使用以下代码生成上半部分:

ggplot(data.frame(x=rnorm(1000, 5)), aes(x=x)) + geom_bar() + scale_y_reverse()

然而现在,如果我添加任何其他的geom_,例如另一个geom_bar(),y轴的比例就会反转。是否可能仅将scale_y_reverse()应用于特定的geom_

2个回答

8
另一种选择是创建两个单独的图表,然后使用gridExtra包中的arrangeGrob将它们组合在一起。通过调整图表边距,你可以得到一个看起来不错的图表。
library(gridExtra)
library(ggplot2)

set.seed(100)
p2 <- ggplot(data.frame(x=rnorm(1000, 5)), aes(x=x)) + geom_bar() + theme(plot.margin=unit(c(0,0,0,0), 'lines'))
p1 <- p2 + scale_y_reverse() + 
    theme(plot.margin=unit(c(0, 0, -.8, 0), 'lines'), axis.title.x=element_blank(), 
          axis.text.x=element_blank(), axis.ticks.x=element_blank())

p <- arrangeGrob(p1, p2)
print(p)

enter image description here


幽灵踩票者!请报上你的名字并解释一下自己! - Matthew Plourde

4

ggplot只喜欢有一个y轴刻度。最简单的方法是自己重塑数据。在这里,我们可以使用geom_rect在任何位置绘制数据,并将其条件化为组时间。这里是一个例子:

#sample data
dd<-data.frame(
  year=rep(2000:2014, 2), 
  group=rep(letters[1:2], each=15), 
  count=rpois(30, 20)
)

现在我们可以绘制它了。但首先,让我们定义一下将顶部的条形图偏移一些空间的最大高度。

height <- ceiling(max(tapply(dd$count, dd$year, sum))*1.10)

这里是我们的绘图方式。
ggplot(dd) + 
  geom_rect(aes(xmin=year-.4, xmax=year+.4, 
    ymin=ifelse(group=="a", 0, height-count), 
    ymax=ifelse(group=="a", count, height), fill=group)) + 
  scale_y_continuous(expand=c(0,0))

这将给我们带来:

输入图片说明


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接