绘制变量意味着自变量的每个级别。环R

时间:2017-05-13 11:36:14

标签: r

给出下一个代码和数据帧:

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

Plot

每个完整的数据集只有一个点。但是我想在同一个图中得到每个级别J(1,2,3)的S1的平均值,每个J级别的S2的平均值,每个J级别的S3的平均值,以及每个J级别的平均值为S4。

1 个答案:

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

enter image description here

或者你可以这样做:

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)