给出下一个代码和数据帧:
require(data.table)
require(ggplot2)
dat1 <- fread('J S1 S2 S3 S4 Z
1 4 5 3 2 0
1 6 5 6 5 1
2 3 5 8 9 0
2 12 11 34 44 1
3 11 23 23 22 0
3 12 15 22 21 1')
temp <- melt(dat1, id.vars = c("J", "Z"))
ggplot(temp, aes(x = J, y = value, color = variable, shape = as.factor(Z))) +
geom_point()
我想在同一个图中绘制每个J级别的值(S1,S2,S3,S4)的平均值。我的意思是,对于S1,我的图中获得3个点:5.5,7.5,11.5 。对于S2,还有3分,依此类推......
我正在尝试这个:
ggplot(temp, aes(x = J, y = mean(value), color = variable, shape = as.factor(Z))) +
geom_point()
每个完整的数据集只有一个点。但是我想在同一个图中得到每个级别J(1,2,3)的S1的平均值,每个J级别的S2的平均值,每个J级别的S3的平均值,以及每个J级别的平均值为S4。
答案 0 :(得分:1)
您需要在数据中为平均值添加行。
请告诉我这是否有意义,或者您希望有不同之处。
你可以这样做:
library(data.table)
temp1 <- setDT(temp)[,.(value = mean(value)),by=.(J,variable)]
ggplot(temp1, aes(x = J, y = value, color=factor(variable))) +
geom_point()
或者你可以这样做:
ggplot(temp1, aes(x = variable, y = value, color=factor(J))) +
geom_point()
在OP的请求之后编辑:
要考虑Z变量,您需要总结数据基础Z,如下所示,然后绘制:
temp1 <- setDT(temp)[,.(value = mean(value)),by=.(J,variable,Z)]
ggplot(temp1, aes(x = variable, y = value, color=factor(J),shape=factor(Z))) +
geom_point()
现在该图包含三个分类变量,“变量”,“J”和“Z”,您可以通过交替切换它们来玩它们以查看适合您的需要,不要忘记在它们之前使用factor()如果你想在美学中使用形状和颜色。如果你想分别绘制0和1的图形,那么你必须使用facet_wrap,如下所示:
ggplot(temp1, aes(x = variable, y = value, color=factor(J),shape=factor(Z))) +
geom_point() + facet_wrap(~Z)