因此,我试图为学生成绩的条形图着色,这取决于他们是否通过了某项考试。
为了做到这一点,我读了两个单独的.csv文件并构建了数据,因此它按某个变量排序。以下是其中一个数据集的负责人:
head(Y)
fName mid lab exam overall
1 OOJOE 50 94 77.5 77
2 JWTWB 45 50 60.5 54
3 XQXQA 65 78 69.0 71
4 PVTMX 35 84 30.5 47
5 ZZBDP 70 100 74.0 81
6 JVYMA 65 96 73.5 79
其他数据集(X)包含有关学生出勤率等的信息。 我为每个学生制作了一个箱线图,显示出席人数中位数(使用数据集X),但我的总体目标是根据每个学生的总成绩是否达到40(来自数据集Y)来为箱图着色。
我正在使用ggplot ...这是我到目前为止所尝试的内容:
ggplot(data=X,aes(x=fName, y=delay, group=fName)) +
geom_boxplot(color = Y$overall <40) +
scale_colour_manual(name = 'overall < 40', values = setNames(c('red','green'),c(T, F))) +
coord_flip()
但这只是告诉我这是一个无效的颜色名称......我也试过了:
ggplot(data=X,aes(x=fName, y=delay, group=fName)) +
geom_boxplot(color = ifelse(Y$overall >= 40,'red','green')) +
coord_flip()
这确实将箱形图分成两种不同的颜色......但是它没有正确地执行它(即,它没有着色值&gt; = 40红色而所有其他颜色都是绿色...它似乎只是随机分配一些学生红色和一些绿色)。我怀疑它不起作用,因为ifelse
命令与ggplot
不兼容,但我不确定。
关于我如何解决此问题的任何建议?
编辑: 这是X的头部,只是为了显示延迟列的一个例子:
head(X)
fName Information fTime min.Time. delay
1 ARONR Course outline 2010-09-22T09:16:00Z 2010-09-20T20:21:00Z 1.5381944
2 ARONR Lab Dec 13 2010-12-11T17:21:00Z 2010-12-09T12:20:00Z 2.2090278
3 ARONR Lab Nov 1 2010-11-03T11:10:00Z 2010-10-28T17:21:00Z 5.7423611
4 ARONR Lab Nov 22 2010-11-22T14:16:00Z 2010-11-22T11:51:00Z 0.1006944
5 ARONR Lab Nov 29 2010-11-29T15:04:00Z 2010-11-25T18:00:00Z 3.8777778
6 ARONR Lab Nov 8 2010-11-10T11:07:00Z 2010-11-05T19:12:00Z 4.6631944
这里有一些额外的数据,只有一个学生帮助在共同密钥下合并: Y数据集:
fName mid lab exam overall
ZZBDP 70 100 74.0 81
X数据集:
fName Information fTime min.Time. delay
ZZBDP Lecture Dec 1 2010-12-01T13:02:00Z 2010-12-01T12:31:00Z 2.152778e-02 ZZBDP Lecture Dec 8 2010-12-08T08:49:00Z 2010-12-07T16:43:00Z 6.708333e-01
ZZBDP Lecture Nov 10 2010-11-10T11:14:00Z 2010-11-09T13:35:00Z 9.020833e-01
ZZBDP Lecture Nov 17 2010-11-17T18:25:00Z 2010-11-17T10:31:00Z 3.291667e-01
ZZBDP Lecture Nov 24 2010-11-24T09:23:00Z 2010-11-23T11:35:00Z 9.083333e-01
答案 0 :(得分:1)
通过将更新后的X
和Y
data.frames转换为data.tables,然后在fName
上合并它们,我得到以下data.table
(dt
):
library(data.table)
library(ggplot2)
X <- structure(list(fName = c("ZZBDP", "ZZBDP", "ZZBDP", "ZZBDP",
"ZZBDP"), Information = c("Lecture Dec 1", "Lecture Dec 8", "Lecture Nov 10",
"Lecture Nov 17", "Lecture Nov 24"), fTime = c("2010-12-01T13:02:00Z",
"2010-12-08T08:49:00Z", "2010-11-10T11:14:00Z", "2010-11-17T18:25:00Z",
"2010-11-24T09:23:00Z"), min.Time. = c("2010-12-01T12:31:00Z",
"2010-12-07T16:43:00Z", "2010-11-09T13:35:00Z", "2010-11-17T10:31:00Z",
"2010-11-23T11:35:00Z"), delay = c(0.0215, 0.671, 0.902, 0.329,
0.908)), .Names = c("fName", "Information", "fTime", "min.Time.",
"delay"), row.names = c(NA, -5L), class = "data.frame")
Y <- structure(list(fName = c("OOJOE", "JWTWB", "XQXQA", "PVTMX",
"ZZBDP", "JVYMA"), mid = c(50L, 45L, 65L, 35L, 70L, 65L), lab = c(94L,
50L, 78L, 84L, 100L, 96L), exam = c(77.5, 60.5, 69, 30.5, 74,
73.5), overall = c(77L, 54L, 71L, 47L, 81L, 79L)), .Names = c("fName",
"mid", "lab", "exam", "overall"), row.names = c(NA, -6L), class = "data.frame")
# Convert to data.table
setDT(X)
setDT(Y)
# Merge X and Y on fName and store in dt
dt <- Y[X, on="fName"]
>dt
fName mid lab exam overall Information fTime min.Time. delay
1: ZZBDP 70 100 74 81 Lecture Dec 1 2010-12-01T13:02:00Z 2010-12-01T12:31:00Z 0.0215
2: ZZBDP 70 100 74 81 Lecture Dec 8 2010-12-08T08:49:00Z 2010-12-07T16:43:00Z 0.6710
3: ZZBDP 70 100 74 81 Lecture Nov 10 2010-11-10T11:14:00Z 2010-11-09T13:35:00Z 0.9020
4: ZZBDP 70 100 74 81 Lecture Nov 17 2010-11-17T18:25:00Z 2010-11-17T10:31:00Z 0.3290
5: ZZBDP 70 100 74 81 Lecture Nov 24 2010-11-24T09:23:00Z 2010-11-23T11:35:00Z 0.9080
以上data.table包含自变量(fName
),因变量(delay
)和用于着色的变量(overall
)。
制作delay
vs fName
的箱线图,其中大于或等于40的overall
分数为红色(以及40以下的绿色),请使用:
ggplot(dt, aes(x = fName, y = delay, group = fName, color = overall >= 40)) +
geom_boxplot() + scale_color_manual(values = c("red", "green")) +
coord_flip()