在R中的相同图中绘制2个因子值的频率

时间:2011-10-22 12:22:07

标签: r

我想绘制为2个因子水平编码的可变颜色的频率,例如蓝色条应该是A级的组合而绿色B级的组合是否在同一个图形中?这可以用hist命令吗? hist的帮助不允许一个因素。还有另外一种方法吗?

我设法通过手动条形图来做到这一点,但我想询问是否有更自动的方法

enter image description here

非常感谢 EC

PS。我不需要密度图

5 个答案:

答案 0 :(得分:1)

目前还不清楚您拥有的数据布局。直方图要求您有一个序数或连续的变量,以便可以创建中断。如果您还有单独的分组因子,则可以根据该因子绘制直方图。在格子包中的histogram函数的帮助页面上的第二个示例中提供了这种分组和覆盖密度曲线的一个很好的实例。 Second lattice::histgram example

用于学习格子和ggplot2绘图的相对优点的一个很好的资源是Learning R博客。两个绘图系统This is from the first of a multipart series on side-by=side comparison

library(lattice)
 library(ggplot2)
 data(Chem97, package = "mlmRev")
#The lattice method:
pl <- histogram(~gcsescore | factor(score), data = Chem97)
 print(pl)

Lattice histogram

# The ggplot method:
 pg <- ggplot(Chem97, aes(gcsescore)) + geom_histogram(binwidth = 0.5) +
     facet_wrap(~score)
 print(pg)

enter image description here

答案 1 :(得分:1)

如果其他人没有回答,这是一种满足的方式。我最近不得不处理堆叠直方图,这就是我所做的:

data_sub <- subset(data, data$V1 == "Yes") #only samples that have V1 as "yes" in my dataset #are added to the subset

hist(data$HL)
hist(data_sub$HL, col="red", add=T)

希望这就是你的意思?

答案 2 :(得分:0)

我认为你不能用条形直方图轻松做到这一点,因为你必须从两个因子水平“交错”条形图......它需要现在连续x轴的某种“离散化” (即它必须在“类别”中分开,并且在每个类别中,对于每个因子级别,您将有2个条形...

但如果您可以使用密度线函数进行绘图,那么它很容易且没有问题:

y <- rnorm(1000, 0, 1)
x <- rnorm(1000, 0.5, 2)
dx <- density(x)
dy <- density(y)
plot(dx, xlim = range(dx$x, dy$x), ylim = range(dx$y, dy$y), 
     type = "l", col = "red")
lines(dy, col = "blue")

enter image description here

答案 3 :(得分:0)

很可能。

我没有数据可供使用,但这里是一个带有不同颜色条的直方图的示例。从这里你需要使用我的代码并弄清楚如何使它适用于因子而不是尾巴。

基本设置 直方图&lt; - hist(scale(vector)),breaks =,plot = FALSE) plot(histogram,col = ifelse(abs(histogram $ breaks)&lt; #of SD,Color 1,Color 2))

#EXAMPLE
x<-rnorm(1000)
histogram <- hist(scale(x), breaks=20 , plot=FALSE)
plot(histogram, col=ifelse(abs(histogram$breaks) < 2, "red", "green"))

答案 4 :(得分:0)

我同意其他人的看法,密度图比合并直方图的彩色条更有用,特别是如果组的值是混合的。这将是非常困难的,并不会真正告诉你太多。你有一些关于密度图的好建议,这是我有时使用的密度图的2美分:

y <- rnorm(1000, 0, 1) 
x <- rnorm(1000, 0.5, 2) 
DF <- data.frame("Group"=c(rep(c("y","x"), each=1000)), "Value"=c(y,x))

library(sm)

with(DF, sm.density.compare(Value, Group, xlab="Grouping"))
title(main="Comparative Density Graph")
legend(-9, .4, levels(DF$Group), fill=c("red", "darkgreen"))