2016-01-06 71 views
0

我目前正在尝试获得与本页上发现的数据表类似的比例数据图表(http://www.improving-visualisation.org/vis/id=148)。如何制作比例面积图?

我工作的数据摘自1993年至2003年期间按性别和课程类型分层的大学毕业生数量的CSV。我已将csv分为“df_list” - 1993年可以在这里看到。

df_list [1] $ 1993

year  sex       type_of_course no_of_graduates 
1 1993 Males         Education    na 
2 1993 Males        Applied Arts    na 
3 1993 Males    Humanities & Social Sciences    481 
4 1993 Males      Mass Communication    na 
5 1993 Males        Accountancy    295 
6 1993 Males     Business & Administration    282 
7 1993 Males          Law    92 
8 1993 Males Natural, Physical & Mathematical Sciences    404 
9 1993 Males         Medicine    95 
10 1993 Males         Dentistry    14 
11 1993 Males       Health Sciences    10 
12 1993 Males     Information Technology    264 
13 1993 Males     Architecture & Building    132 
14 1993 Males      Engineering Sciences   1496 
15 1993 Males         Services    na 
16 1993 Females         Education    na 
17 1993 Females        Applied Arts    na 
18 1993 Females    Humanities & Social Sciences   1173 
19 1993 Females      Mass Communication    na 
20 1993 Females        Accountancy    396 
21 1993 Females     Business & Administration    708 
22 1993 Females          Law    93 
23 1993 Females Natural, Physical & Mathematical Sciences    588 
24 1993 Females         Medicine    61 
25 1993 Females         Dentistry    11 
26 1993 Females       Health Sciences    40 
27 1993 Females     Information Technology    215 
28 1993 Females     Architecture & Building    144 
29 1993 Females      Engineering Sciences    254 
30 1993 Females         Services    na 

我了解,下一步将作出个人的比例柱状图每年可为相对于每个课程 - 我究竟如何着手呢?我目前正试图将男性和女性合并为一行。

+0

此处介绍的数据目前在R会话中不可用,使得这个问题几乎无法回答。请编辑该问题。 – boshek

+0

你的问题到底是什么?如何制作图表?如何以您想要的格式获取数据? – Heroka

+1

你能告诉我们dput(df_list)的结果吗? – ytk

回答

1

由于数据不可重现,因此未经测试。但我认为,像这样的工作:

library(ggplot2) 

ggplot(dflist, aes(x=sex, y=no_of_graduates, fill=type_of_course)) + 
    geom_bar(stat="identity") 

或者一个简单的光圈例如:

library(dplyr) 

iris %>% 
    mutate(DummyXVar="DummyX") %>% 
    ggplot(aes(y=Petal.Width, x=DummyXVar,fill=Species)) + 
    geom_bar(stat="identity") 

HTH

1

虽然最终的问题是获得一个图形,似乎更多的是问题处理data.frame。

一种玩具-数据集可再现例如:

year <- c(rep("1993",6), rep("1994",6)) 
sex <- c(rep("males",3), rep("females", 3)) 
course <- c(rep(letters[1:3],4)) 
number <- 1:12*10 
data <- data.frame(cbind(year, sex, course, number)) 
data$number <- as.numeric(data$number) 
data$number[1] <- NA 

而不管sex变量的统一number变量。

library(dplyr) 
df <- data %>% group_by(year, course) %>% summarise(total=sum(number, na.rm=TRUE))  
library(plyr) 
df_2 <- ddply(df, .(year), transform, label_y=cumsum(total)) 

脚注(1)

获得所需的图表

library(ggplot2) 
ggplot(df_2, aes(x=year, y=total, fill=course)) + geom_bar(stat="identity") + 
     geom_text(aes(y=label_y ,label=total), vjust=3, colour="white") 

enter image description here

(1)封装的装载和玩dplyr是非常敏感的。有些功能被修改,第二次必须离开R重复这个过程。我还没有找到更好的方法。

0

不具有数据一起工作,我产生一个小样本可能被他人利用和改进:

library(dplyr) 
library(ggplot2) 
set.seed(1) 
year <- rep("1993", 20) 
sex <- rep(c("M","F"), each = 10) 
course <- rep(letters[1:10], 2) 
num <- round(runif(20, min = 49, max = 120)) 
df <- data.frame(year, sex, course, num) 
df <- tbl_df(df) 
df 
Source: local data frame [20 x 4] 

    year sex course num 
    (fctr) (fctr) (fctr) (dbl) 
1 1993  M  a 68 
2 1993  M  b 75 
3 1993  M  c 90 
4 1993  M  d 113 
5 1993  M  e 63 
6 1993  M  f 113 
7 1993  M  g 116 
8 1993  M  h 96 
9 1993  M  i 94 
10 1993  M  j 53 
11 1993  F  a 64 
12 1993  F  b 62 
13 1993  F  c 98 
14 1993  F  d 76 
15 1993  F  e 104 
16 1993  F  f 84 
17 1993  F  g 100 
18 1993  F  h 119 
19 1993  F  i 76 
20 1993  F  j 104 

请注意,我用的课程名称字母。 现在,我会做一个标记数据集:

mylab <- data.frame(x = factor(df$course), 
     y = rep(c(0.3, 0.8), each = 10), l = df$num) 

最后的情节:

ggplot(data = df, aes(x = factor(course), y = num, fill=factor(sex))) + 
    geom_bar(stat = "identity", position = "fill") + 
    geom_text(data = mylab, aes(x = x, y = y, label = l)) 

输出是: enter image description here

当然,现在人们可以有标签和标题玩。
希望它有帮助。