Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 叠加密度图不包括直方图值_R_Ggplot2_Frequency_Kernel Density - Fatal编程技术网

R 叠加密度图不包括直方图值

R 叠加密度图不包括直方图值,r,ggplot2,frequency,kernel-density,R,Ggplot2,Frequency,Kernel Density,我想将密度曲线叠加到我构建的频率直方图上。对于频率直方图,我使用了aes(y=…计数../40),因为40是我的总样本数。我使用aes(y=…density..*0.1)强制密度介于0和1之间,因为我的binwidth是0.1。但是,密度曲线不适合我的数据,它排除了等于1.0的值(请注意,柱状图显示了bin=(1.0,1.1)的累积值,但密度曲线以1.0结束) 这是我的数据 data<-structure(list(variable = structure(c(1L, 1L, 1L, 1L

我想将密度曲线叠加到我构建的频率直方图上。对于频率直方图,我使用了aes(y=…计数../40),因为40是我的总样本数。我使用
aes(y=…density..*0.1)
强制密度介于0和1之间,因为我的binwidth是0.1。但是,密度曲线不适合我的数据,它排除了等于1.0的值(请注意,柱状图显示了bin=(1.0,1.1)的累积值,但密度曲线以1.0结束)

这是我的数据

data<-structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("E1", "test"
), class = "factor"), value = c(0.288888888888889, 0.0817901234567901, 
0.219026548672566, 0.584795321637427, 0.927554980595084, 0.44661095636026, 
1, 0.653780942692438, 1, 0.806451612903226, 1, 0.276794335371741, 
1, 0.930109557990178, 0.776864728192162, 0.824909747292419, 1, 
1, 1, 1, 1, 0.0875912408759124, 0.308065494238933, 1, 0.0258064516129032, 
0.0167322834645669, 1, 1, 0.355605889014723, 0.310344827586207, 
0.106598984771574, 0.364447494852436, 0.174724342663274, 0.77491961414791, 
1, 0.856026785714286, 0.680759275237274, 0.850657108721625, 1, 
1, 0, 0.851851851851852, 1, 0, 0.294954721862872, 0.819870009285051, 
0, 0.734147168531706, 0.0135424091233072, 0.0189098998887653, 
0.0101010101010101, 0, 0.296905222437137, 0.706837929731772, 
0.269279393173198, 0.135379061371841, 0.158969804618117, 0.0902981940361193, 
0.00423131170662906, 0, 0.374880611270296, 0.0425790754257908, 
0.145542753183748, 0, 0.129032258064516, 0.260334645669291, 0, 
0, 1, 0.175505350772889, 0.08248730964467, 0, 0.317217981340119, 
0.614147909967846, 0, 0.264508928571429, 0.883520276100086, 0.0657108721624851, 
0, 0.560229445506692)), row.names = c(NA, -80L), .Names = c("variable", 
"value"), class = "data.frame")

数据您的绘图所做的正是您的数据所期望的:

  • 您可以绘制
    数据$value
    ,其中包含0到1之间的数值,因此您应该期望密度曲线也从0到1运行
  • 绘制一个binwidth为0.1的直方图。垃圾箱下端关闭,上端打开。因此,在您的案例中得到的装箱是[0,0.1],[0.1,0.2],[0.9,1.0],[1.0,1.1)。数据中有17个值为1,因此进入最后一个装箱,从1到1.1绘制
我认为用这种方式绘制直方图是个坏主意。原因是对于直方图,x轴是连续的,这意味着覆盖x轴范围的条表示0.1到0.2之间(包括)0.1到0.2(不包括后者)的值计数。在这种情况下使用道奇会导致图片失真,因为条形图现在不再覆盖正确的x轴范围。两条条形图共享它们应该完全覆盖的范围。这种失真是密度曲线似乎与直方图不匹配的原因之一

那么,你能做些什么呢?我可以给你一些建议,但也许其他人有更好的想法

  • 不必使用
    position=“dodge”
    相邻绘制直方图,您可以使用刻面,也就是说,将直方图(以及相应的密度曲线)绘制到单独的绘图中。这可以通过向绘图中添加
    +刻面网格(变量~)
    来实现


  • 您可以稍微欺骗一下,让最后一个bin(即[0.9,1])包含1(即,让它成为[0.9,1.0])。只需将数据中的1替换为0.999,如下所示:
    data$value[data$value==1]我知道我不应该用这个来感谢你,但你没有在你的个人资料中提供任何沟通手段。你的答案是完美的。我对使用position=“dodge”感到不安,但对于堆叠的版本,我甚至看不到数据。即使对于研讨会演示,刻面方法也很漂亮。
    
    q<-ggplot(data, aes(value, fill = variable)) 
            q + geom_density(alpha = 0.6,aes(y=..density..*0.1),binwidth=0.1) 
        + theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) 
        + theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) 
        + labs(title="Density Plot GrupoB",x="Respuesta",y="Density")
        +scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1))
        +geom_histogram(alpha = 0.6,aes(y=..count../40),binwidth=0.1,position="dodge")
    
    data$value[data$value==1]<-0.999
    q<-ggplot(data, aes(value, fill = variable)) 
    q + geom_density(alpha = 0.6,aes(y=..density..),adjust=0.2)  +
       theme_minimal()+scale_fill_manual(values =c("#D7191C","#2B83BA")) +
       theme(legend.position="bottom")+ guides(fill=guide_legend(nrow=1)) +
       labs(title="Density Plot GrupoB",x="Respuesta",y="Density")+
       scale_x_continuous(breaks=seq(from=0,to=1.2,by=0.1))+
       geom_histogram(alpha = 0.6,aes(y=..count../40/.1),binwidth=0.1) +
       facet_grid(variable~.)