根据因子水平拆分直方图

24

这是我的数据:

type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)

如果我想绘制diff的直方图,我会这样做:

hist(data$diff)

但是我想根据 类型 分割我的直方图。我可以这样做:

par(mfrow=c(1,2))
hist(data$diff[data$type==0])
hist(data$diff[data$type==1])

但是,现在我得到的是两个不同的直方图并排,我想做的是产生一个单一的直方图,在其中一侧具有diff0 ,在另一侧具有diff1。就像这样,条形图是连续的,没有间断或边框。这可能意味着每个因素的轴将被分成两部分。

enter image description here
2个回答

35

你可以使用ggplot2包:

library(ggplot2)

ggplot(data,aes(x=diff))+geom_histogram()+facet_grid(~type)+theme_bw()

在此输入图片描述

您还可以通过“dodging”将它们放在同一绘图中:

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="dodge",binwidth=0.25)+theme_bw()

在这里输入图片描述

如果您想让它们重叠,位置必须为position="identity"

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="identity",alpha=0.5,binwidth=0.25)+theme_bw()

如果您想让它们看起来像第一张图片,但不要边框,您需要进行一些修改:

输入图像描述

data$diff[data$type==1] <- data$diff[data$type==1] + 6

ggplot(data,aes(x=diff,group=type,fill=type))+
  geom_histogram(position="identity",alpha=0.5,binwidth=0.25)+theme_bw()+
  scale_x_continuous(breaks=c(-2:2,4:8),labels=c(-2:2,-2:2))

输入图像描述


谢谢你,Sam。我已经能够生成这个图表了。但是我想要合并这两个图表。基本上是相同的,没有中间分隔它们的边框。 - 89_Simple

15

那个图形是使用lattice包绘制的

set.seed(1)
type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)


library('lattice')
histogram(~ diff | type, data = data)

输入图像描述

以下是如何在基础图形中完成它的方法。

## first plot - left half of x-axis, right margin set to 0 lines
par(fig = c(0, .5, 0, 1), mar = c(5,4,3,0))
hist(data$diff[data$type==0], ann = FALSE, las = 1)

## second plot - right half of x-axis, left margin set to 0 lines
par(fig = c(.5, 1, 0, 1), mar = c(5,0,3,2), new = TRUE)
hist(data$diff[data$type==1], ann = FALSE, axes = FALSE)
axis(1)
axis(2, lwd.ticks = 0, labels = FALSE)

title(main = 'Histogram', xlab = 'x label', outer = TRUE, line = -2)

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接