如何在汇总数据上绘制堆积条形图

时间:2019-03-03 22:53:08

标签: r

对于名为df的数据,其内容为:

car suv pickup
 1   2   1
 2   3   4
 4   1   2
 5   4   2
 3   1   1
total =  apply(df,1,sum)
barplot(total,col= rainbow(5))

所以我现在要做的是绘制一个总车数的小图,实际上是每行的总和。我现在要做的是将其显示为总和上的堆栈条。

现在,它将仅显示“ total”,而没有任何行表示1辆汽车,2 suv,1个皮卡是否加了4个“ total”。

注意。它与barplot(matrix(df))不同,因为这只是将其除以我的汽车,suv,皮卡,而忽略了总数。

2 个答案:

答案 0 :(得分:0)

你在追求这样的东西吗?

library(tidyverse)
df %>%
    rowid_to_column("row") %>%
    gather(k, v, -row) %>%
    ggplot(aes(row, v, fill = k)) +
    geom_col()

enter image description here

我们在这里使用堆叠式条形图,因此无需手动计算总和。这里的关键是将数据从宽到长转换并跟踪行。


样本数据

df <- read.table(text =
    "car suv pickup
 1   2   1
 2   3   4
 4   1   2
 5   4   2
 3   1   1", header = T)

答案 1 :(得分:0)

您可以使用ggplot2reshape2轻松实现这一目标。 您将需要一个ID列来跟踪行,因此在其中进行了添加。我将数据融合为long类型,以便可以对不同的组进行管理和相应地绘制。 然后使用geom_bar进行绘制,将行ID指定为x轴,并为堆栈图和图例指定分组(fillcolour)。

library(reshape2)
library(ggplot2)
df <- data.frame("ID" = c(1,2,3,4,5), "car" = c(1,2,4,5,3), "suv" = c(2,3,1,4,1), "pickup" = c(1, 4, 2, 2, 1))
long_df <- df %>% melt(id.vars = c("ID") ,value.name = "Number", variable.name = "Type")

ggplot(data = long_df, aes(x = ID, y = Number)) +
  geom_bar(aes(fill = Type, colour = Type),
           stat = "identity",
           position = "stack")

以R为底

df %>% melt(id.vars = c("ID") ,value.name = "Number", variable.name = "Type") %>% 
  dcast(Type ~ ID, value.var = "Number") %>% 
  as.matrix() %>% 
  barplot()