R将箱形图与条形图结合使用有效,但反之则不行

时间:2019-04-02 09:11:26

标签: r ggplot2

我试图在R中合并两个图。我想要一个条形图,在第二个步骤中,我绘制一个箱形图以覆盖这两个信息。

如果我先绘制箱形图,然后绘制条形图,则此方法有效,但是对于覆盖其后一半框的条形来说,这看起来很丑。解决这两个问题是显而易见的解决方案,但这在Discrete value supplied to continuous scale上失败了。我知道alpha参数可以增加透明度,但是我真的很想了解如果交换绘图顺序会为什么会发生此错误。

这是MWE:

library(ggplot2) 
a_box <- matrix(c(1.3, 2.4, 5.2, 2.3, 4.2,2.1), ncol=2, nrow=3)
a_box <- data.frame(a_box)
a_box <- stack(a_box)
# bar plot should plot the mean values
# I add 'index' values for each mean to the vector
a <- matrix(c(2.9, 2.8, 1.0, 2.0), nrow=2, ncol=2)
a <- data.frame(a)
colnames(a) <- c('values', 'index')
# Combining both plots - first box then bar works
ggplot() + geom_boxplot(data=a_box, aes(ind, values)) + geom_bar(data=a, aes(a$index, a$values), stat='identity')
# the other way around not - 'Discrete value supplied to continuous scale' - why?
ggplot() +  geom_bar(data=a, aes(a$index, a$values), stat='identity', alpha=0.3) + geom_boxplot(data=a_box, aes(ind, values))

我该怎么做才能按期望的顺序进行工作?

1 个答案:

答案 0 :(得分:1)

您正试图绘制两个具有不同x轴的数据集。一个离散(a_box)和一个“连续”(a)。为了克服这个问题,您可以将x轴从(a_box)映射到geom_barplot调用,它将很好地工作。

ggplot() +  geom_bar(data=a, aes(unique(a_box$ind), a$values), stat='identity', alpha=0.3) + geom_boxplot(data=a_box, aes(ind, values))