堆叠条形图与group by和facet

时间:2018-01-27 11:16:52

标签: r ggplot2 dplyr bar-chart facet

我的数据如下:

system  operation_type  prep_time   operation_time
A       x               0.7         1.4
A       y               0.11        2.3
A       z               1.22        6.7
B       x               0.44        5.2
B       y               0.19        2.3
B       z               3.97        9.5
C       x               1.24        2.4
C       y               0.23        2.88
C       z               0.66        9.7

我希望在prep_time和操作时间上有一个堆积图表,它给出了按系统分组的total_time,然后由operation_type进行分面。

我的代码现在看起来像这样。

library(ggplot2)

df <- read.csv("test.csv", strip.white=T)
plot <- ggplot(df, aes(x=system,y=(prep_time+operation_time))) + geom_bar(stat="identity") + facet_grid(.~operation_type)

我得到的输出是 enter image description here

我需要的是条形区别,它显示total_time的哪一部分是prep_time,什么是operation_time。我想为prep_time和operation_time添加一个图例并使用不同的颜色,但我无法弄清楚我是如何做到的。

1 个答案:

答案 0 :(得分:1)

这应该给你一个开始。您需要根据operation_timeType将数据框从宽格式转换为长格式,因为它们是相同的变量。在这里,我调用了新列system。要在x轴上绘制fill,我们可以使用geom_col指定不同的颜色。 facet_grid是绘制堆积条形图的命令。 library(tidyr) library(ggplot2) df2 <- df %>% gather(Type, Time, ends_with("time")) ggplot(df2, aes(x = system, y = Time, fill = Type)) + geom_col() + facet_grid(. ~ operation_type) 是创建构面的命令。

df <- read.table(text = "system  operation_type  prep_time   operation_time
A       x               0.7         1.4
                 A       y               0.11        2.3
                 A       z               1.22        6.7
                 B       x               0.44        5.2
                 B       y               0.19        2.3
                 B       z               3.97        9.5
                 C       x               1.24        2.4
                 C       y               0.23        2.88
                 C       z               0.66        9.7",
                 header = TRUE, stringsAsFactors = FALSE)

enter image description here

数据

facet_wrap