繁体   English   中英

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

[英]How to draw stacked barplot on the summed data

对于读取的名为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))

所以我现在所做的是在汽车总数上绘制条形图,实际上是每行的总和。 我现在想要做的是将它呈现为总和上的堆栈条形图。

目前,它只会显示“总计”,而没有任何行表明 1 辆汽车、2 辆 suv、1 辆皮卡是否与 4 个“总计”相加。

笔记。 它与barplot(matrix(df)) ,因为那只是将它除以我的汽车、SUV、皮卡,而忽略总数。

你追求这样的事情吗?

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

在此处输入图片说明

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


样本数据

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

您可以使用ggplot2reshape2轻松实现这reshape2 您将需要一个 ID 列来跟踪行,因此我已将其添加到其中。我将数据融合为长类型,以便可以相应地管理和绘制不同的组。 然后使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM