我有如下样本数据test.data
。
income expend id
9142.7 1576.2 1
23648.75 2595 2
9014.25 156 1
4670.4 604.4 3
6691.4 3654.4 3
14425.2 66 2
8563.45 1976.2 2
2392 6 1
7915.95 619.2 3
4424.2 504.2 2
我首先使用ddply
来获取每个id的平均收入和支出
library(plyr)
group<-ddply(test.data, .id,summarize, income.mean=mean(income),expend.mean=mean(expend))
现在,我使用ggplot2
中的情节函数通过income.mean and expend.mean
id.
library (ggplot2)
plot.income<-qplot(id,income.mean,data=group)
plot.expend<-qplot(id,expend.mean,data=group)
虽然上面的代码运行没有任何错误,但我正在寻找在ddply中组合qplot函数的有效方法,反之亦然。此外,如果我需要将这两个图组合在一起,我该怎么做?
谢谢。
答案 0 :(得分:3)
我认为你想要的是要求从'qplot'函数切换到'ggplot'函数。在'ddply'函数中包含图形函数不会很漂亮,反之亦然。你最好将它们分开,所以我将专注于组合图形。我认为有两种方法可以做到这一点:
选项1 :只需在同一个'ggplot'对象上将两个绘图作为单独的几何图形。这不是两个难以做到的,并且是这样的:
ggplot(group) + geom_point(aes(x=id, y=income.mean), colour="red") + geom_point(aes(x=id, y=expend.mean), colour="blue")
这是一个快速选项,可以通过最少的计算完成工作。但是,它要求您为每列指定新几何。在您的示例数据中,这不是问题,但在许多情况下,您希望使用代码执行此操作,而不是手动执行此操作。
选项2 :重塑数据以将两个集合组合在一个图表中。然后,我们可以通过变量
进行着色来指定分组library(reshape2)
plot_Data <- melt(group, id="id")
# Output of plot_Data
# id variable value
# 1 1 income.mean 6849.650
# 2 2 income.mean 12765.400
# 3 3 income.mean 6425.917
# 4 1 expend.mean 579.400
# 5 2 expend.mean 1285.350
# 6 3 expend.mean 1626.000
ggplot(plot_Data, aes(x=id, y=value, col=variable)) + geom_point()
这种方法的缺点是我们正在进行更多的计算,因此大型复杂数据帧的处理速度可能会变慢。然而,优势(这是巨大的)是我们不必知道我们正在绘制的数据框中存在哪些列。在没有我们干预的情况下,所有东西都被分类,着色和绘制,因此我们可以灵活地使用它来处理任何事情。
您应该可以从这里进行调整以满足您的需求。
答案 1 :(得分:2)
要合并这两个图,我必须将reshape2
包放入melt
数据:
library(ggplot2)
library(plyr)
library(reshape2)
test.data <- read.table(text="income expend id
9142.7 1576.2 1
23648.75 2595 2
9014.25 156 1
4670.4 604.4 3
6691.4 3654.4 3
14425.2 66 2
8563.45 1976.2 2
2392 6 1
7915.95 619.2 3
4424.2 504.2 2", header=TRUE)
qplot(data=melt(ddply(test.data, .(id), colwise(mean)), id.vars="id"), x=id, y=value, colour=variable)
答案 2 :(得分:1)
嗯,你的问题不是很精确,因为我们不知道你到底想做什么。但这是一个猜测:
d <- read.table(textConnection("income expend id
9142.7 1576.2 1
23648.75 2595 2
9014.25 156 1
4670.4 604.4 3
6691.4 3654.4 3
14425.2 66 2
8563.45 1976.2 2
2392 6 1
7915.95 619.2 3
4424.2 504.2 2"), header=TRUE)
library(reshape2)
d2 <- melt(d, id.var="id")
ggplot(data=d2, aes(x=id,y=value)) + stat_summary(fun.y="mean", geom="bar") + facet_grid(.~variable)
会给: