当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《R-根据因子水平分割直方图》经验,为你挑选了2个好方法。

这是我的数据:

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

如果我想绘制历史图diff,我这样做:

hist(data$diff)

但是我想要做什么来分割我的直方图type.我能做到这一点:

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

但这给我的是两个不同的直方图.我想要做的就是生产出一个直方图diff0一侧及diff1,在另一侧.像这样的东西,条形连续,没有断裂或边界.这可能意味着轴将被分成两个因子. 在此输入图像描述



1> Sam Dickson..:

你可以使用这个ggplot2包:

library(ggplot2)

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

在此输入图像描述

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

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

在此输入图像描述



2> rawr..:

该图是使用格子包制作的

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)

在此输入图像描述

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有