如何在ggplot2中制作多条形图?

Dus*_*tin 5 r ggplot2

我正在与ggplot2苦苦挣扎,并希望通过示例学习更多.

我有很多数据看起来像这样生成的东西:

data.frame(version=c('v1', 'v1', 'v1', 'v1', 'v2', 'v2', 'v2', 'v2'),
           platform=c('linux', 'linux', 'mac', 'mac',
                      'linux', 'linux', 'mac', 'mac'),
           type=c('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'),
           count=floor(runif(8, 0, 10000)))
Run Code Online (Sandbox Code Playgroud)

我经常barplot给我画一个给定操作系统的堆积条形图(通过切片cast,但我还没有得到我想要的ggplot2.

我可以通过做这样的事情来设法绘制单个平台(假设上面的内容保存为sample):

qplot(version, a, data=cast(sample[sample$platform=='linux',],
                            version ~ type, value="count"),
      geom='bar')
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望按类型堆叠(a在此示例中明确指出- 只有两种类型),然后每个平台有一个并排显示在按版本分组的同一图表上.

也就是说,对于每个版本,我都想要三个条形图(每个平台一个条形图),每个条形图有两个堆栈(按类型).

jor*_*ran 7

这是一个选项:

dat <- data.frame(version=c('v1', 'v1', 'v1', 'v1', 'v2', 'v2', 'v2', 'v2'),
           platform=c('linux', 'linux', 'mac', 'mac',
                      'linux', 'linux', 'mac', 'mac'),
           type=c('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'),
           count=floor(runif(8, 0, 10000)))


ggplot(data = dat, aes(x = platform, y = count)) + 
    facet_wrap(~version) + 
    geom_bar(aes(fill = type))
Run Code Online (Sandbox Code Playgroud)

产生这样的东西:

在此输入图像描述

你的示例数据只有两个平台,所以也许这只是一个错字,因为你引用了三个.

  • @Dustin没问题.[这个](http://learnr.wordpress.com/)博客有很多好的ggplot2例子,Hadley的[网站](http://had.co.nz/ggplot2/)也是如此,但他的书到目前为止最好的参考. (2认同)