使用ggplot2绘制多值(一对多)数据

时间:2012-10-19 21:31:41

标签: r ggplot2 plyr

我有数据显示文件中存储为CSV的照片中的人:

|------------+---------------------------|
| image      | people                    |
|------------+---------------------------|
| image1.png | John, Paul                |
| image2.png | John                      |
| image3.png |                           |
| image4.png | George, Paul, John, Ringo |
| ...        |                           |
|------------+---------------------------|

我想将它加载到R中,并以各种方式绘制它,但是我想说我想得到一个条形图,显示每个人出现的次数。

如果有帮助,我可以重组数据。

谢谢

1 个答案:

答案 0 :(得分:1)

这样的数据集描述了您在问题中提到的情况:

require(plyr)
people_list = c("Edward", "Smith", "Neo", "Mr. Anderson", 
                "Red John", "Blackbeard", "Lily", "Anne")
dat = data.frame(image = sprintf("image%d.png", 1:100))
dat = ddply(dat, .(image), function(x) {
  people = sample(people_list, size = sample(1:length(people_list), 1))
  return(data.frame(image = x$image, people))
})
> head(dat)
       image     people
1 image1.png Blackbeard
2 image1.png     Edward
3 image1.png       Anne
4 image1.png       Lily
5 image1.png        Neo
6 image1.png   Red John

如果您将数据集投射为此形状,则可以使用ddply中的plyr来计算此聚合:

# Number of occurences of people
occ = ddply(dat, .(people), summarise, no_occurence = length(people))
> occ
        people no_occurence
1         Anne           48
2   Blackbeard           56
3       Edward           46
4         Lily           55
5 Mr. Anderson           55
6          Neo           51
7     Red John           60
8        Smith           56

...并以此为例创建一个条形图:

require(ggplot2)
theme_set(theme_bw())
ggplot(occ, aes(x = people, y = no_occurence)) + geom_bar()

enter image description here

这可能会让您开始创建其他可视化。