R 将频率转换为hist()中的百分比会更改数据的分布
我试图将以下数据绘制为直方图,其中女性(f)标准长度数据(sl)与男性(m)标准长度数据(sl)重叠,频率显示为样本中个体总数的比例R 将频率转换为hist()中的百分比会更改数据的分布,r,plot,histogram,frequency-distribution,R,Plot,Histogram,Frequency Distribution,我试图将以下数据绘制为直方图,其中女性(f)标准长度数据(sl)与男性(m)标准长度数据(sl)重叠,频率显示为样本中个体总数的比例 habitat location sex sl 1 river bargo f 45.75 2 river bargo f 38.53 3 river bargo m 38.80 4 river bargo m 38.04 5
habitat location sex sl
1 river bargo f 45.75
2 river bargo f 38.53
3 river bargo m 38.80
4 river bargo m 38.04
5 river bargo f 43.12
6 river bargo f 37.44
7 river bargo f 38.87
8 river bargo f 41.80
9 river bargo f 41.94
10 river bargo m 41.86
11 river bargo m 45.74
12 river bargo f 46.38
13 river bargo f 33.32
14 river bargo f 28.94
15 river bargo f 26.81
16 river bargo f 32.72
17 river bargo f 28.86
18 river bargo f 26.37
19 river bargo f 27.66
20 river bargo f 28.24
21 river bargo f 26.07
22 river bargo f 36.18
23 river bargo f 38.37
24 river bargo f 38.31
25 river bargo f 45.47
26 river bargo f 41.08
27 river bargo f 41.53
28 river bargo f 48.23
29 river bargo f 45.31
30 river bargo f 48.93
31 river bargo f 36.13
32 river bargo f 38.24
33 river bargo f 38.93
34 river bargo f 36.20
35 river bargo f 33.95
36 river bargo f 34.04
37 river bargo f 33.31
38 river bargo f 32.96
39 river bargo f 39.64
40 river bargo f 31.61
41 river bargo f 34.72
42 river bargo f 35.09
43 river bargo f 33.48
44 river bargo f 31.93
45 river bargo f 31.74
46 river bargo f 32.95
47 river bargo f 35.03
48 river bargo m 31.35
使用以下代码:
1) 为了对数据进行子集划分,我使用了两个因子的子集函数,因为bargo是我的数据集中11组中的一组
males.bar<-subset(mydata, mydata$location=="bargo" & mydata$sex=="m", select="sl")
males.bar.sl<-as.numeric(males.bar$sl)
females.bar<-subset(mydata,mydata$location=="bargo" & mydata$sex=="f", select="sl")
female.bar.sl<-as.numeric(females.bar$sl)
轴是分开绘制的,因为我想自定义记号和标签。
生成的绘图应如下所示:
然后我环顾四周,了解如何将频率转换为y轴上的百分比,并确定最简单的方法是:
因此,我尝试将其合并到上面显示的代码中,如下所示:
par(mar=c(.5,2.25,1.5,.5), mgp=c(1.25,.75,0))
hist((males.bar.sl$counts/(males.bar.sl$counts+females.bar.sl$counts)*100), axes=F, col=rgb(1, 0, 0, 0.5), xlim=c(18,60), ylim=c(0,17), breaks=seq(18,60,by=1), main=NULL, xlab=NULL, ylab="Frequency", Freq=T)
hist((females.bar.sl$counts/(males.bar.sl$counts+females.bar.sl$counts)*100), axes=F, col=rgb(0, 0, 1, 0.2), breaks=seq(18,60,by=1), add=T, Freq=T)
title("Bargo River", line=-2)
box()
axis(1, at=seq(20,60,by=5), labels=F, tck=.02, padj = -1)
axis(2, at=seq(0,17,by=2), labels=T, tck=.02, padj=1)
但是,结果很奇怪,如下图所示:
我知道y轴上的记号标签是相同的,但如果我没有弄错的话,那也没关系;无论y轴范围如何,条形图应至少显示相同的分布和相对高度
你知道为什么这些条会“折叠”成四条,而不是第一张图中的10条左右吗?另外,请记住,这些单独的直方图将作为多面板图的一部分绘制。如果可能的话,我还想打印样本大小和一条垂直线,指示男性和女性数据的平均值
我期待你的答复
问候,
丹尼尔你的例子是不可复制的。什么是
男性.brk.sl
和女性.brk.sl
?什么是雄性.bar.sl$计数
和雌性.bar.sl$计数
?为什么不只是一个密度图?我刚刚修正了这个代码。这只是几个类型错误<代码>雄性.brk.sl和雌性.brk.sl
已更改为雄性.bar.sl
和雌性.bar.sl
。另外,males.bar.sl$counts和其他值应该是样本量的长度(即样本量=n)。不确定此处是否可以使用length()。我试过了,它似乎起了作用,除了现在,我的条形图根本没有显示出来,我有以下警告显示:警告消息:1:在plot.window(xlim,ylim,“,…):“breaks”不是图形参数2:在title(main=main,sub=sub,xlab=xlab,ylab=ylab,…):“breaks”不是图形参数
par(mar=c(.5,2.25,1.5,.5), mgp=c(1.25,.75,0))
hist((males.bar.sl$counts/(males.bar.sl$counts+females.bar.sl$counts)*100), axes=F, col=rgb(1, 0, 0, 0.5), xlim=c(18,60), ylim=c(0,17), breaks=seq(18,60,by=1), main=NULL, xlab=NULL, ylab="Frequency", Freq=T)
hist((females.bar.sl$counts/(males.bar.sl$counts+females.bar.sl$counts)*100), axes=F, col=rgb(0, 0, 1, 0.2), breaks=seq(18,60,by=1), add=T, Freq=T)
title("Bargo River", line=-2)
box()
axis(1, at=seq(20,60,by=5), labels=F, tck=.02, padj = -1)
axis(2, at=seq(0,17,by=2), labels=T, tck=.02, padj=1)