在R中:从单个输出中获取多个条形图

时间:2015-09-16 18:59:51

标签: r

我有一个数据框(100 x 4)。第一列是一组“bins”0-100,其余列是每个bin中每个事件变量的计数(0到最大事件数)。

我要做的是将三列数据中的每一列(2:4)并排绘制。因为每个数据集的每个容器中的计数接近相同,所以数据在我创建的直方图/条形图中重叠,尽管我使用了旁边= true,并且position = dodge。

我将第一列设置为数字和字符,但结果相同 - 条形图重叠在一起。 (半透明的密度图不起作用,因为我想要的不是分布密度)。

基于R和其他文档的附加代码产生了附图。

barplot(BinCntDF$preT,main=NewMain_Trigger, plot=TRUE,
    xlab="sample frequency interval counts (0-100 msec bins)", 
    names.arg=BinCntDF$dT, las=0,
    ylab="bin counts", axes=TRUE, xlim=c(0,100), 
    ylim=c(0,1000), col="red") 
 geom_bar(position="dodge")
 barplot(BinCntDF$postT, beside=TRUE, add=TRUE)
 geom_bar()

目标是能够在同一轴上并排比较两个(或更多)数据集,而不会与其他轴重叠。

2 个答案:

答案 0 :(得分:0)

我认为您已将barplotggplot2混为一谈。 ggplot2是一个函数geom_bar来自的库,它与Base R附带的barplot不兼容。

只需比较?barplot?geom_bar,您就会发现geom_bar来自ggplot2库。在我使用ggplot2库和reshape2后实现您的目标。

第1步

根据您的描述,我假设您的数据大致如下:

df <- data.frame(x = 1:10, 
                 c1 = sample(0:100, replace=TRUE, size=10),
                 c2 = sample(0:50, replace=TRUE, size=10),
                 c3 = sample(0:70, replace=TRUE, size=10))

要使用ggplot2绘制它,首先必须将数据转换为长格式而不是宽格式。您可以使用melt中的reshape2函数执行此操作。

library(reshape2)
a <- melt(df, id=c("x"))

输出看起来像这样

> head(a)
  x variable value
1 1       c1    62
2 2       c1    47
3 3       c1    20
4 4       c1    64
5 5       c1     4
6 6       c1    52

第2步

有很多关于ggplot2做什么和参数的在线教程。我会向你推荐谷歌,或搜索SO中的许多帖子来理解。

ggplot(a, aes(x=x, y=value, group=variable, fill=variable)) + 
  geom_bar(stat='identity', position='dodge')

它为您提供输出:

enter image description here

简而言之:

  • group对感兴趣的变量进行分组
  • stat=identity确保不会对您的数据进行其他汇总

答案 1 :(得分:0)

有了这么多箱子(100)和团体(3),情节会显得凌乱,但试试这个:

set.seed(123)
myDF <- data.frame(bins=1:100, x=sample(1:100, replace=T), y=sample(1:100, replace=T), z=sample(1:100, replace=T))
myDF.m <- melt(myDF, id.vars='bins')
ggplot(myDF.m, aes(x=bins, y=value, fill=variable)) + geom_bar(stat='identity', position='dodge')

Barplot 1

你也可以尝试用w / facets绘图:

ggplot(myDF.m, aes(x=bins, y=value, fill=variable)) + geom_bar(stat='identity') + facet_wrap(~ variable)

Barplot 2