在单个图表上绘制多个条件的数据
我正在尝试使用ggplot2进行绘图,并使用可从数据中计算出来的某些条件生成的并排条。 我怀疑问题是正确地格式化我的数据,这样ggplot会给我我想要的。 尽管如此,我无法为我的生活做好准备。
我所拥有的是每次学生在学校上课的数据框都填充了行。 感兴趣的变量是Student.ID,Course.ID,Session,Fiscal.Year和Facility。 每一行都是学生参加课程的一种情况,并告诉他们所采取的课程,他们接受的课程等等。据我所知,这是长数据所需的数据(纠正我,如果我是错误)。 唯一有可能的NA值的字段是Facility,但我打算将这些值排除在阴谋之外,因此您可以将数据帧视为完全填充。
我想要做的是在每个财政年度制作一个情节,显示有多少课程有<2个学生,有多少个有4个学生,有多少个有4个以上的学生,总共提供了多少课程。 (注意:当我在谈论提供了多少课程时,我考虑到每门课程可能会提供多次,每次提供课程时都会有一个会话编号,棘手的部分是会话数字并不是唯一的,我希望这是有道理的,如果需要,我可以尝试澄清更多。)
我设想最终产品是使用位置的多个图表,x轴为Fiscal.Year,y轴为课程/会话的数量。 对于图表中的每个FY,我希望并排堆叠不同颜色的酒吧,显示该位置上为该FY提供的<2,<4,<= 4总课程数。 考虑下面的图表,而不是“收入,费用,贷款”,我想要“<= 2,<4,<= 4,总计”(他们也会从左到右递增,类别)。
这里有一些示例数据可以使用(键入为CSV,因为我不能只复制文件的头部)。 我已经排除了设施专栏,因为这方面很容易,我们可以假设我认为一个测试示例是FY。 作为参考,它应该有3个课程,其中<= 2个学生,5个课程<4个,6个<= 4。此样本集中提供的课程总数为6个。
ID,CourseID,Session,Fiscal.Year 101,1,,1,FY13 102,1,1,FY13 103,1,1,FY13 104,1,1,FY13 101,2,1,FY13 102,2,1,FY13 103,2,1,FY13 101,2,2,FY13 102,2,2,FY13 103,2,2,FY13 101,3,1,FY13 102,3,1,FY13 101,3,2,FY13 102,3,2,FY13 101,3,3,FY13 102,3,3,FY13
我努力了:
ggplot(na.omit(df), aes(y = TwoLess, x = Fiscal.Year)) + geom_bar(stat = 'identity') + facet_wrap(~Facility)
我认为这种方法存在严重缺陷,我错失了长数据的一些“好处”,因为这是ggplot想要的,因为我理解它。
在ggplot中绘图的最佳方法是什么?
还值得一提的是,虽然我可以访问一些比较流行的软件包,比如ggplot2,plyr,reshape2,但是我没有能力加载所有的软件包,所以我更喜欢使用上述软件包的解决方案(或者它们的任何依赖关系)。 这不应该是一个很大的限制,我不认为。
会有这样的帮助吗?
扩展你的数据
> dput(df)
structure(list(ID = c(101L, 102L, 103L, 104L, 101L, 102L, 103L,
101L, 102L, 103L, 101L, 102L, 101L, 102L, 101L, 102L, 101L, 102L,
103L, 104L, 101L, 102L, 103L, 101L, 102L, 103L, 101L, 102L, 101L,
102L, 101L, 102L, 101L, 102L, 103L, 104L, 101L, 102L, 103L, 101L,
102L, 103L, 101L, 102L, 101L, 102L, 101L, 102L), CourseID = c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L),
Session = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L,
2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L,
1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
1L, 1L, 2L, 2L, 3L, 3L), Fiscal.Year = c("FY13", "FY13",
"FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY13",
"FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY14", "FY14",
"FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY14",
"FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY15", "FY15",
"FY15", "FY15", "FY15", "FY15", "FY15", "FY15", "FY15", "FY15",
"FY15", "FY15", "FY15", "FY15", "FY15", "FY15")), .Names = c("ID",
"CourseID", "Session", "Fiscal.Year"), class = "data.frame", row.names = c(NA,
-48L))
df
ID CourseID Session Fiscal.Year
1 101 1 1 FY13
2 102 1 1 FY13
3 103 1 1 FY13
4 104 1 1 FY13
5 101 2 1 FY13
6 102 2 1 FY13
7 103 2 1 FY13
8 101 2 2 FY13
9 102 2 2 FY13
10 103 2 2 FY13
11 101 3 1 FY13
12 102 3 1 FY13
13 101 3 2 FY13
14 102 3 2 FY13
15 101 3 3 FY13
16 102 3 3 FY13
17 101 1 1 FY14
18 102 1 1 FY14
19 103 1 1 FY14
20 104 1 1 FY14
21 101 2 1 FY14
22 102 2 1 FY14
23 103 2 1 FY14
24 101 2 2 FY14
25 102 2 2 FY14
26 103 2 2 FY14
27 101 3 1 FY14
28 102 3 1 FY14
29 101 3 2 FY14
30 102 3 2 FY14
31 101 3 3 FY14
32 102 3 3 FY14
33 101 1 1 FY15
34 102 1 1 FY15
35 103 1 1 FY15
36 104 1 1 FY15
37 101 2 1 FY15
38 102 2 1 FY15
39 103 2 1 FY15
40 101 2 2 FY15
41 102 2 2 FY15
42 103 2 2 FY15
43 101 3 1 FY15
44 102 3 1 FY15
45 101 3 2 FY15
46 102 3 2 FY15
47 101 3 3 FY15
48 102 3 3 FY15
用dplyr总结一下
d1 <- df %>%
group_by(CourseID, Session, Fiscal.Year) %>%
summarise(n=length(ID))
然后再次
d2 <- d1 %>%
group_by(Fiscal.Year) %>%
summarise(d1 = length(n[n <= 2]),
d2 = length(n[n < 4]),
d3 = length(n[n <= 4])
)
library(reshape2)
d3 <- melt(d2)
ggplot(d3, aes(Fiscal.Year, value, fill = variable)) +
geom_bar(stat = 'identity', position = 'dodge')
用ggplot2绘制它
有人必须提供一个聪明的选择。 我累了。 现在去睡觉。
链接地址: http://www.djcxy.com/p/30929.html上一篇: Plotting data with Multiple Conditions on a Single Chart