R-根据因子水平分割直方图

时间:2015-12-02 14:04:37

标签: r histogram levels

这是我的数据:

diff

如果我想绘制hist(data$diff) 的历史图,我这样做:

type

但我想根据par(mfrow=c(1,2)) hist(data$diff[data$type==0]) hist(data$diff[data$type==1]) 分割我的直方图。我能做到这一点:

diff

但是这给我的是两个不同的直方图。我想要做的是生成一个直方图,一边是0 diff,另一边是1 .directive('onlyDigits', function () { return { require: 'ngModel', restrict: 'A', link: function (scope, element, attr, ctrl) { function inputValue(val) { if (val) { var digits = val.replace(/[^0-9]/g, ''); if (digits !== val) { ctrl.$setViewValue(digits); ctrl.$render(); } return parseInt(digits,10); } return undefined; } ctrl.$parsers.push(inputValue); } }; 。像这样的东西,条形连续,没有断裂或边界。这可能意味着轴将被分成两个因子。  enter image description here

2 个答案:

答案 0 :(得分:21)

您可以使用ggplot2包:

library(ggplot2)

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

enter image description here

你也可以通过"躲避"将它们放在同一个地块上。它们:

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

enter image description here

如果您希望它们重叠,则位置必须为position="identity"

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

enter image description here

如果你希望它们看起来像第一个但没有边框,你必须稍微破解它:

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))

enter image description here

答案 1 :(得分:9)

该图是使用格子包

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


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

enter image description here

以下是如何在基础图形中实现的

## 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)

enter image description here