【问题标题】:Two histograms at the same graph - not overlapping同一图表上的两个直方图 - 不重叠
【发布时间】:2016-02-29 17:23:31
【问题描述】:

我有两个数字向量,我想为每个向量绘制一个直方图 + 正态曲线。

第一个数值向量:

dput(X)
structure(c(18.9006028896526, 15.2623176606927, 23.9827366796017, 
18.6674504871855, 33.8321828287622, 106.070218436199, 33.7827125058274, 
138.544803100033, 98.8988553851087, 84.6705010348182, 90.0070387381623, 
97.842536232733, 6.75830201534835, 24.105734944894, 18.9289005033733, 
107.837417018034, 91.2295363960887, 120.394907406909, 23.4284311509232, 
27.936658956423), .Names = c("A", "B", "C", "D", "E", "F", "G", "H", 
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"))

第二个数值向量:

> dput(Y)

structure(c(4.98024718191362, 4.97784623179944, 37.54860832645, 
34.0616843614727, 146.39674720645, 17.3962674768585, 40.896642118419, 
71.7799735926384, 46.5749573881639, 39.3924128572005, 137.396714992547, 
111.856816465825, 80.8041773807388, 24.1694521970975, 15.700639434151
), .Names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))

这些向量的长度不同。我想应用类似于下面用于单个直方图和正态曲线估计的代码:

h<-hist(X, breaks=25, col="green", xlab="Graph", 
        main="Histogram and Normal Curve", xlim = c(0, 100)) 
xfit<-seq(min(X),max(X),length=40) 
yfit<-dnorm(xfit,mean=mean(X),sd=sd(X)) 
yfit <- yfit*diff(h$mids[1:2])*length(X) 
lines(xfit, yfit, col="blue", lwd=2)

期望的输出:

【问题讨论】:

  • 那么这里的问题到底是什么?期望的输出是什么?
  • 我不知道如何将两个直方图放在同一个图表上。我的意思是我想看到每个向量中的条彼此靠近
  • “在同一张图上”对您意味着什么?你能上传你所追求的草图吗?这不是很清楚。直方图不是相互结合得很好的图表。
  • 添加了所需的输出。看起来像条形图...

标签: r


【解决方案1】:

如果您希望两个直方图并排显示,可以使用par() 函数:

编辑:根据您的第一条评论,您真正想要的是具有两个不同系列的直方图...所以这里是新代码:

hist(X, breaks=25, col=rgb(0,1,0,alpha=.25), xlab="Graph", 
        main="Histograms and Normal Curves", xlim = c(0, 100)) 
xfit<-seq(min(X),max(X),length=40) 
yfit<-dnorm(xfit,mean=mean(X),sd=sd(X)) 
yfit <- yfit*diff(h$mids[1:2])*length(X) 
lines(xfit, yfit, col="green", lwd=2)

hist(Y, breaks=25, col=rgb(1,0,0, alpha=0.25), xlim = c(0, 100), add=TRUE) 
xfit2<-seq(min(Y),max(Y),length=40) 
yfit2<-dnorm(xfit2,mean=mean(Y),sd=sd(Y)) 
yfit2 <- yfit2*diff(h$mids[1:2])*length(Y) 
lines(xfit2, yfit2, col="red", lwd=2)

最后的情节:

这里的关键是使用rgb() 函数的alpha 参数使条形半透明。你可以在this link阅读其他一些解决方案

【讨论】:

  • 我希望每个向量的条形图都在同一个图上。
  • 看起来不错。我正在比较的数据与这段代码看起来相当不错。
猜你喜欢
  • 2020-02-23
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2015-01-10
  • 1970-01-01
相关资源
最近更新 更多