Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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_Plot - Fatal编程技术网

R 为两点之间的内核密度图着色。

R 为两点之间的内核密度图着色。,r,plot,R,Plot,我经常使用核密度图来说明分布。在R中可以轻松快速地创建这些内容,如下所示: set.seed(1) draws <- rnorm(100)^2 dens <- density(draws) plot(dens) #or in one line like this: plot(density(rnorm(100)^2)) 但是如何对q75和q95之间的区域进行着色?使用polygon()函数,请查看其帮助页面,我相信我们这里也有类似的问题 您需要找到分位数值的索引以获得实际的(x,y

我经常使用核密度图来说明分布。在R中可以轻松快速地创建这些内容,如下所示:

set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)
plot(dens)
#or in one line like this: plot(density(rnorm(100)^2))
但是如何对
q75
q95
之间的区域进行着色?

使用
polygon()
函数,请查看其帮助页面,我相信我们这里也有类似的问题

您需要找到分位数值的索引以获得实际的
(x,y)

编辑:给你:

x1 <- min(which(dens$x >= q75))  
x2 <- max(which(dens$x <  q95))
with(dens, polygon(x=c(x[c(x1,x1:x2,x2)]), y= c(0, y[x1:x2], 0), col="gray"))
x1=q75))
x2另一种解决方案:

dd <- with(dens,data.frame(x,y))

library(ggplot2)

qplot(x,y,data=dd,geom="line")+
  geom_ribbon(data=subset(dd,x>q75 & x<q95),aes(ymax=y),ymin=0,
              fill="red",colour=NA,alpha=0.5)
dd q75&x扩展解决方案:

dd <- with(dens,data.frame(x,y))

library(ggplot2)

qplot(x,y,data=dd,geom="line")+
  geom_ribbon(data=subset(dd,x>q75 & x<q95),aes(ymax=y),ymin=0,
              fill="red",colour=NA,alpha=0.5)
如果您想对两个尾部进行着色(复制和粘贴德克代码),并使用已知的x值:

set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)
plot(dens)

q2     <- 2
q65    <- 6.5
qn08   <- -0.8
qn02   <- -0.2

x1 <- min(which(dens$x >= q2))  
x2 <- max(which(dens$x <  q65))
x3 <- min(which(dens$x >= qn08))  
x4 <- max(which(dens$x <  qn02))

with(dens, polygon(x=c(x[c(x1,x1:x2,x2)]), y= c(0, y[x1:x2], 0), col="gray"))
with(dens, polygon(x=c(x[c(x3,x3:x4,x4)]), y= c(0, y[x3:x4], 0), col="gray"))
set.seed(1)

绘制这个问题需要一个
lattice
答案。这是一个非常基本的方法,简单地修改Dirk和其他人采用的方法:

#Set up the data
set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)

#Put in a simple data frame   
d <- data.frame(x = dens$x, y = dens$y)

#Define a custom panel function;
# Options like color don't need to be hard coded    
shadePanel <- function(x,y,shadeLims){
    panel.lines(x,y)
    m1 <- min(which(x >= shadeLims[1]))
    m2 <- max(which(x <= shadeLims[2]))
    tmp <- data.frame(x1 = x[c(m1,m1:m2,m2)], y1 = c(0,y[m1:m2],0))
    panel.polygon(tmp$x1,tmp$y1,col = "blue")
}

#Plot
xyplot(y~x,data = d, panel = shadePanel, shadeLims = c(1,3))
#设置数据
种子(1)

绘制这是另一个基于函数的
ggplot2
变量,该函数近似原始数据值下的内核密度:


approvedens如果您没有提供结构,我永远不会让它工作。谢谢这是其中一件事。。。从黎明前开始就在
演示(图形)
中出现,因此人们时不时会遇到。对于NBER回归着色等也有同样的想法。我知道我在什么地方见过它,但我无法从我看到它的精神指数中得出结论。我很高兴你的智力指数比我的好。你能举个例子,说明你的范围外和范围内的阴影吗?谢谢。我有png文件,并在freeimagehosting上托管了它,它可能不会加载,因为。。。我不确定。文件很模糊。你能不能重新创建并直接上传到这里,这样就有了自己的服务器服务?很抱歉,但我不知道如何直接上传到这里。