【问题标题】:plotting average % vs % rank (Average score at average performance)绘制平均百分比与排名百分比(平均表现的平均分数)
【发布时间】:2018-04-19 16:22:22
【问题描述】:

假设有 3 个等级。物理、数学、化学。 总成绩为(物理 + 数学 + 化学 / 3)

在 x 轴上,我以百分比表示总成绩。所以最好的学生是 1.00,最差的学生是 0.00,中位学生是 0.50。

在 y 轴上,我想绘制每个班级占总成绩的百分比。

以便根据学生的表现好坏以及不同水平的学生擅长哪些课程来查看是否有任何变化。

这是我当前数据框的副本。

Observations: 269,049
Variables: 3
$ TotalRank <dbl> 0.00, 0.30, 0.30, 0.29, 0.21, 0.68, 0.22, 0.02, 0.13, 0.44, 0.02, 0.37, 0.42, 0.40, 0.43, 0.55, 0...
$ Class    <chr> "Chemistry", "Maths", "Maths", "Physics", "Maths", "Maths", "Physics", "Maths", "Chemistry"...
$ Value    <dbl> 0.34, 0.36, 0.36, 0.43, 0.41, 0.38, 0.41, 0.39, 0.34, 0.35, 0.35, 0.34, 0.34, 0.39, 0.33, 0.35, 0...

我的目标是制作一个如下所示的图表:

我的代码:

ggplot(DATAFRAME, aes(x = TotalRank, y = Value, fill = Class)) + 
  geom_area()

x 轴似乎工作正常,但在 y 轴上它只是将每个 x 值的点相加,而不是绘制该点的平均值。

如何绘制每个 x 点的平均 y 值,分为 100 个 bin。

编辑:这是我的情节的样子,请忽略值,因为它们是一个例子。

这就是我构建数据框的方式。

dataframe <- dataframe %>%
    mutate(ChemistryPc = round(Chemistry/TotalGrade, 2),
        MathsPc = round(Maths/TotalGrade, 2),
        PhysicsPc = round(Physics/TotalGrade, 2),
        TotalRank = round(percent_rank(TotalGrade), 2))


dataframe <- dataframe %>%
  gather(key = 'Class', value = 'Value', -TotalRank)

以下是值:

        Chemistry    Maths        Physics  TotalGrade 
1        47.63       20.41          70.31  138.35
2       142.88       95.25         163.29  401.42
3       142.88       95.25         163.29  401.42
4       170.10       77.11         145.15  392.36
5       138.35       65.77         136.08  340.20
6       229.06      161.03         210.92  601.01
7       142.88       68.04         136.08  347.00
8        86.18       52.16          83.91  222.25
9       102.06       77.11         120.20  299.37
10      174.63      122.47         195.04  492.14
11       74.84       47.63          92.99  215.46
12      154.22      115.67         183.70  453.59
13      163.29      111.13         204.12  478.54
14      181.44       99.79         188.24  469.47
15      161.03      127.01         197.31  485.35
16      190.51      120.20         231.33  542.04
17      165.56      124.74         201.85  492.15
18      254.01      131.54         219.99  605.54
19      258.55      174.63         240.40  673.58
20      233.60      154.22         247.21  635.03

【问题讨论】:

  • 您无法绘制平均值,因为您还没有计算出平均值。到目前为止,您编写了什么样的代码来准备数据?否则,您要问 1. 如何计算某种分箱点的平均值,以及 2. 然后如何绘制这些值。
  • 我不知道如何根据总排名数计算平均值。到目前为止,我已经做了很多数据清理/准备工作,我创建了所有等级/值。原始数据只是值,我把它们变成了 % 形式。
  • 我现在将发布我所做的数据准备
  • 好的,我想你可能想把它分成两个单独发布的问题,一个关于如何计算平均值,一个关于如何构建这种类型的图
  • 好吧,我想人们会对我发布它的方式感到非常不满,因为我不知道如何表达我在做什么。我试试看。

标签: r ggplot2 dplyr


【解决方案1】:

解决了,我用过:

dataframe %>%
  select(Sex, ChemistryPc, MathsPc, PhysicsPc, TotalRank) %>%
  group_by(TotalRank) %>%
  summarise_at(vars(-Sex), funs(mean(., na.rm=TRUE))) %>%
  gather(key = 'Class', value = 'ValuePc', -TotalRank)

然后使用

ggplot(dataframe, aes(x = TotalRank, y = ValuePc, fill = Class)) + 
  geom_area()

得到了我的阴谋。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多