我试图绘制一个图表,它显示特定类的数字列中的总值,例如1,3,5等。
这是我的例子:
test <- data.frame("number"=sample(1:10),"class"=c(1,1,2,2,3,3,4,4,5,5))
我使用下面的代码:
number <- test$number
class <- test$class
png("plot1_test.png", width=600, height=600)
plot(class, number, type="h", xlab="Class", ylab="Sum of number")
dev.off()
结果出来它只识别每个类的第一个值。如果我想要总数,我需要按照总数来对每个类进行子集化吗?我如何创建一个仅显示某些类并不是全部的图?
答案 0 :(得分:1)
尝试使用aggregate
。它会根据sum
中的值将函数test$number
应用于class
数据。
test.aggreg <- aggregate(test$number, by=list(test$class), sum)
plot(test.aggreg, type="h", xlab="Class", ylab="Total for Class")
答案 1 :(得分:1)
使用ggplot2的简单解决方案:
library(ggplot2)
ggplot(test, aes(class,number)) + geom_bar(stat="identity")
或者,如果你不想使用ggplot2,聚合(使用dplyr):
library(dplyr)
plotdb <- test %>% group_by(class) %>%
summarise(sum_number = sum(number))
然后,使用您最喜欢的绘图函数与class和sum_number。
关于最后一个问题:为了只选择一些类,你可以在第一个选项中添加一个dplyr :: filter:
library(ggplot2)
library(dplyr)
ggplot(filter(test,class %in% 1:3), aes(class,number)) + geom_bar(stat="identity")