对于名为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,皮卡,而忽略了总数。
答案 0 :(得分:0)
你在追求这样的东西吗?
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)
答案 1 :(得分:0)
您可以使用ggplot2
和reshape2
轻松实现这一目标。
您将需要一个ID列来跟踪行,因此在其中进行了添加。我将数据融合为long类型,以便可以对不同的组进行管理和相应地绘制。
然后使用geom_bar
进行绘制,将行ID指定为x轴,并为堆栈图和图例指定分组(fill
和colour
)。
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()