簡體   English   中英

R- 根據因子水平拆分直方圖

[英]R- split histogram according to factor level

這是我的數據:

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 像這樣的東西,條形是連續的,中間沒有中斷或邊界。 這大概意味着對於每個因素,軸將分為兩個。 在此處輸入圖片說明

您可以使用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))

在此處輸入圖片說明

該圖是使用格子包制作的

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)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM