如何为3个给定系列绘制三个相邻的直方图?

时间:2014-12-14 18:52:01

标签: r histogram

我有一个数据表(制表符分隔)如下。

data.csv

A   B   C
0.0509259   0.0634984   0.0334984
0.12037 0.0599042   0.0299042
0.00925926  0.0109824   0.0599042
0.990741    0.976837    0.059442
0.99537 0.997404    0.0549042
0.99537 0.997404    0.0529042
0.00462963  0.0109824   0.0699042
0.986111    0.975839    0.0999042
0.12963 0.0758786   0.0899042
0.00462963  0.00419329  0.0499042
0.865741    0.876597    0.0519042
0.865741    0.870807    0.0539042

如何在一个直方图中绘制多重数据,如下所述。

data<-read.table("C:/Users/User/Desktop/data.csv",header=T)

hist(data$A)
hist(data$B)
hist(data$C)

如何将这三个直方图合并在一起,我可以在一个图中以不同的颜色看到三个不同的系列?

示例输出: enter image description here

2 个答案:

答案 0 :(得分:1)

如果你对ggplot2没问题,可以按照以下步骤进行:

library(reshape2)
library(ggplot2)

1:重新排列数据帧以将A,B,C更改为因子:

dat3 <- melt(dat2, varnames = c('A','B','C'))    

2:使用因子绘制:(

qplot(data=dat3, value, fill=variable, position = 'dodge')

不能对ggplot2

说太多好话

enter image description here

答案 1 :(得分:1)

这有两种方法。在基地R:

barplot(t(as.matrix(data)),beside=TRUE,
        col=c("red","green","blue"),names=rownames(data))

使用ggplot

library(ggplot2)
library(reshape2)
gg <- melt(data.frame(id=rownames(data),data),id="id")
gg$id <- factor(gg$id,levels=unique(gg$id))
ggplot(gg,aes(x=id,y=value,fill=variable))+geom_bar(stat="identity",position="dodge")

ggplot方法最终更加灵活,也是更多的工作。您必须根据行名称(或序列1:nrow(data),如果您愿意)添加列,并将数据从宽格式转换为长格式(如另一个答案中所示)。但是你还没有完成:ggplot将id转换为一个因子然后按字母顺序排序,所以这些组是e,g,1,10,11,12,2, 3,......你不想要那个,所以你必须先对因子进行重新排序,然后进行绘图。