2010-11-01 47 views
0

说我有两个因素,我想在同一个图上绘制它们,这两个因子都具有相同的级别。在同一个图上绘制两个因子

s1 <- c(rep("male",20), rep("female", 30)) 
s2 <- c(rep("male",10), rep("female", 40)) 
s1 <- factor(s1, levels=c("male", "female")) 
s2 <- factor(s2, levels=c("male", "female")) 

我以为使用表函数会产生正确的图形结果,但它会弹出。

table(s1, s2) 
     s2 
s1  male female 
male  10  10 
female 0  30 

因此,其实两个问题,什么是表函数做着得到这样的结果,我可以用什么样的函数来创建使用功能与同级别2系列的图形?

此外,如果这是一个因素,我使用gplots包中的barplot2来绘制它。

+0

你的第三行应该是s1 < - factor(s1,levels = c(“male”,“female”))。此外,你期待什么类型的情节?如果你绘制(表格(s1,s2)),你将得到应急表的mosiac图。 – Greg 2010-11-01 02:35:59

+0

对不起,我在输入样本数据时很粗心。我希望能够在同一个图表上绘制每个s1和s2的barplot图,显示出男性和女性之间发生的次数。 – 2010-11-01 03:41:46

回答

5

可以实现与格子包稍微更详细的结果:

s1 <- factor(c(rep("male",20), rep("female", 30))) 
s2 <- factor(c(rep("male",10), rep("female", 40))) 
D <- data.frame(s1, s2) 

library(lattice) 
histogram(~s1+s2, D, col = c("pink", "lightblue")) 

alt text

或者,如果你想通过侧男性/女性一边为方便比较:

t1 <- table(s1) 
t2 <- table(s2) 
barchart(cbind(t1, t2), stack = F, horizontal = F) 

alt text

+1

你应该真的在'factor'调用中指定因子的顺序。蓝色的男孩和粉红色的女孩会更好一些;)(+1无论如何!) – nico 2010-11-01 09:42:53

+0

@nico良好的色彩感:)。纠正。 – VitoshKa 2010-11-01 10:01:27

+0

我喜欢格子,因为荷马S.喜欢啤酒。所以我给你+1。 :) – 2010-11-01 13:00:15

3

?table

“表”使用交叉分级因素中的因子水平的每个组合来构建计数的应急 表。

当你做table(s1,s2)什么情况是,该函数考虑s1s2作为配对结果。实际上,它告诉你,如果你采取cbind(s1,s2)那么将会有10排男性,10个男性和女性等等。

要理解这一点考虑一个很简单的例子:

a <- c("M","M","F","F") 
b <- c("F","F","M","M") 
table(a,b) 

    b 
a F M 
    F 0 2 
    M 2 0 

你应该做的是:

t1 <- table(s1) 
t2 <- table(s2) 
barplot(cbind(t1,t2), beside=TRUE, col=c("lightblue", "salmon")) 
3

两个选项生产略有不同形式的地块是

plot(s1, s2) 

plot(table(s1,s2)) 

前者是马赛克情节的特例,即plot方法table产生(第二个例子)的spineplot。有关更多详细信息,请参阅?spineplot?mosaicplot,如果您愿意,可以直接使用这些功能,而不是通用的plot()

此外看一看的mosaic()功能在vcd包上由CRAN Meyer等人(Link to vcd on CRAN)

table()正在产生contingency table的两个因素。

+0

这不是他正在寻找的东西。他只需要调用'table'两次。 – nico 2010-11-01 07:57:14

+0

@nico - 这两个图都在同一个图上绘制了两个因素。这些数据视图提供了对凸轮B显示的数据类型的替代(可以说是更好的)描述。我没有注意到他在*评论中特意要求了一个barplot。 – 2010-11-01 08:07:48

+0

@nico - 我特意回答了Cam的Q这部分内容:“我还可以使用其他函数来创建一个使用相同级别函数的2个系列的图表?” – 2010-11-01 08:08:43

1

嗯..我不认为创建一个应急表是Cameron正在寻找的。如果我正确理解了他,我想他想创建一个带有两个变量的数据框,其中s1和s2似乎是相同大小的向量。 (长度(S1)==长度(S2))。

在这种情况下,他将只需要创建一个使用“表”(我想他的意思data.frame):

df = data.frame(s1=s1, s2=s2); 

然后绘制2系列在同一个情节。至于绘制这些东西的第二个问题,我会用matplot。例如:

matplot(1:10, data.frame(a=rnorm(10), b=rnorm(10)), type="l", lty=1, lwd=1, col=c("blue","red")) 

鉴于他有他在一个名为“DF”一个data.frame组织2个矢量数据,也只是这样做:

matplot(df, type="l", lty=1, lwd=1, col=c("blue","red")) 

希望这有助于。

相关问题