在时间点内绘制总计数中的部分

时间:2017-02-25 22:45:53

标签: r graph ggplot2 count percentage

我有以下数据框(df1):

ggplot(data = df1, aes(x = Type, y = Age, color = Type)) +
  geom_point() +
  geom_count() +
  facet_wrap(~Participant)

我试图使用ggplot2绘制此数据,其中Age位于y轴上,Type表示为x轴。

到目前为止,我能够做的是,以便对每种类型绘制点,并按照与该年龄段内该类型的计数成比例的大小进行映射。

我使用的代码:

max-height

我想要获得的内容是一个图表,其中每个点的大小与该年龄的计数总数中类型的计数成比例

例如,在3岁时,A为1/4,B为1/2,C为1/4。

我希望能够为每个参与者以及整体数据绘制图表。

1 个答案:

答案 0 :(得分:2)

告诉我这是你的意思:

library(data.table)

df1 <- data.table(Participant = c("John", "John", "John", "John", "John", "Amy", "Amy", "Amy", "Amy"), 
                   Age = c(5,3,3,3,4,5,3,4,4), Type = c("A", "B",  "B", "C", "B", "A", "A", "C", "B"))

df1[, count_by_Age := .N, by = "Age"]

df1[, count_by_Age_Type := .N, by = c("Age", "Type")]

df1[, proportion := count_by_Age_Type/count_by_Age]

所以df1看起来像这样:

> df1
   Participant Age Type count_by_Age count_by_Age_Type proportion
1:        John   5    A            2                 2  1.0000000
2:        John   3    B            4                 2  0.5000000
3:        John   3    B            4                 2  0.5000000
4:        John   3    C            4                 1  0.2500000
5:        John   4    B            3                 2  0.6666667
6:         Amy   5    A            2                 2  1.0000000
7:         Amy   3    A            4                 1  0.2500000
8:         Amy   4    C            3                 1  0.3333333
9:         Amy   4    B            3                 2  0.6666667

因此,如果我已正确理解您,proportion列就是您希望size中的ggplot参数?

    g <- ggplot()
g <- g + geom_point(data = df1, aes(x = Type, y = Age, colour = Type, size = proportion))
g <- g + facet_wrap(~Participant)
print(g)

如果是这样,您将获得以下信息: enter image description here

怎么样?可能想要调整传奇......