2

我有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))

现在,我使用 plot 函数来ggplot2绘制income.mean and expend.meanid.

library (ggplot2)
plot.income<-qplot(id,income.mean,data=group)
plot.expend<-qplot(id,expend.mean,data=group)

虽然上面的代码运行没有任何错误,但我正在寻找在 ddply 中组合 qplot 函数的有效方法,反之亦然。另外,如果我需要结合这两个图,我该怎么做?

谢谢 。

4

3 回答 3

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()

图表示例

这种方法的缺点是我们要进行更多的计算,因此处理大型复杂数据帧可能会变得很慢。然而,优势(这是巨大的)是我们不必知道我们正在绘制的数据框中存在哪些列。一切都在没有我们干预的情况下进行分类、着色和绘制,因此我们可以灵活地将其用于任何事情。

您应该能够从这里进行调整以满足您的需求。

于 2013-02-05T15:41:10.587 回答
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)

在此处输入图像描述

于 2013-02-05T15:37:29.823 回答
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)

会给 :

在此处输入图像描述

于 2013-02-05T15:38:58.323 回答