子设定数据R图

时间:2016-09-23 17:31:10

标签: r plot subset

我试图绘制一个图表,它显示特定类的数字列中的总值,例如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()

结果出来它只识别每个类的第一个值。如果我想要总数,我需要按照总数来对每个类进行子集化吗?我如何创建一个仅显示某些类并不是全部的图?

2 个答案:

答案 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")

看起来像this

答案 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")