我有一个数据框(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()
目标是能够在同一轴上并排比较两个(或更多)数据集,而不会与其他轴重叠。
答案 0 :(得分:0)
我认为您已将barplot
与ggplot2
混为一谈。 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')
它为您提供输出:
简而言之:
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')
你也可以尝试用w / facets绘图:
ggplot(myDF.m, aes(x=bins, y=value, fill=variable)) + geom_bar(stat='identity') + facet_wrap(~ variable)