R 将频率转换为hist()中的百分比会更改数据的分布

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

我试图将以下数据绘制为直方图,其中女性(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       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)