首页 > 解决方案 > 使用 ggplot 绘制多个条形图

问题描述

我有一个名为 frame 的数据框。点击这里查看。它有 20 行。我希望使用 ggplot 获得 4x5 矩阵中的条形图。在每个条形图中,D05、D12、D18 和 D28 位于 x 轴上,相应的值位于 y 轴上。我知道这可以使用 facet_wrap 来完成。我尝试了以下但没有得到预期的结果:

ggplot(data = frame[,-1], aes(x = frame$Date)) + geom_bar() + facet_wrap( ~ frame$Date, ncol = 5)

我该如何进行?

标签: rggplot2

解决方案


您需要先重塑数据。

数据

下次请尝试将此块放入您的问题中,并指定错误消息。

a <- data.frame( Date = c("2017-04",
                          "2017-05",
                          "2017-06",
                          "2017-07",
                          "2017-08",
                          "2017-09",
                          "2017-10",
                          "2017-11",
                          "2017-12",
                          "2018-01",
                          "2018-02"),
                 DO5 = c(0,0,0,15,18,21,23,15,18,15,11),
                 D12 = c(0,0,0,605,737,620,642,599,607,663,548),
                 D18 = c(36,33,38,7,13,15,13,24,40,37,25),
                 D28 = c(502,626,627,28,35,40,19,17,6,1,1)
)

重塑它

在这种情况下,你可以使用许多包来做到这一点,我使用最简单的一个(代码方面)。

install.packages("reshape2")
library(reshape2)                 

b <- melt(a)

head(b)
names(b)

现在剧情

您不需要在 ggplot2中使用“$”运算符。(大多数情况下,当您在正在使用的函数中指定参数数据时)

  library(ggplot2)

  ggplot(data = b, aes(x = variable, y = value)) +
      geom_bar(stat = "identity") +
      facet_wrap( ~ Date, ncol = 5)

结果是这样的


推荐阅读