这个问题在某种程度上与a question I previously posted有关。但是,我已经缩小了我想要做的事情,我觉得这个问题与我之前的问题不同,需要一个新的帖子。
我将多条(> 50条)曲线添加到R中的图中。每条曲线都有相应的概率(0-1)。我已经按概率对曲线进行了排序,并希望使用概率加权透明度alpha
对每条曲线下的区域进行着色。
我按概率按降序添加图。我想在每条曲线下方 部分当前图表上任何曲线未覆盖的部分。
我已经在曲线之间或曲线下阅读了许多关于阴影区域的帖子,但我无法弄清楚如何遮蔽只是图表上任何其他图表未覆盖的区域。我希望这不会被视为重复。
这是一个示例图片(在MS绘画中标记)我希望最终的情节看起来像(除了没有多边形内的线条)。我在这个例子中使用了四条曲线,但是当我弄清楚这一点时,我会添加更多曲线。我首先添加了响应最高的曲线,然后添加了每条后续曲线,仅添加了尚未填充的部分。
在上面的示例中,我使用lines
将曲线添加到图形中,然后在MS绘制中将它们着色。我理解填写每条曲线下面的区域我需要polygon
使用border=NA
。这是我如何计划根据响应值使用多边形进行着色的示例。我目前的方法是使用alpha
调整颜色,但如果有更实用的方法使用灰度托盘或渐变,我愿意接受建议。
polygon(x, y1,col=rgb(0,0,0,alpha=(1-wei.param[1,3])), border=NA )
我尝试了几种不同的方法(基于上述超链接)来指定每个多边形的尺寸。我可以让它适用于多边形1-3,但之后它们开始叠加在一起。
以下是重现图表的示例数据和代码。
diameters<-c(rep(1.5,393),3,3,3,3,3.1,3.1,3.1,3.2,3.2,3.2,3.3,3.4,3.4,3.4,3.4,3.4,
3.4,3.4,3.4,3.5,3.5,3.6,3.6,3.7,3.7,3.7,3.7,3.8,3.8,3.8,3.8,3.8,3.8,
3.9,3.9,4,4,4,4.1,4.2,4.2,4.2,4.2,4.3,4.3,4.4,4.49,4.5,4.5,4.6,4.7,
4.7,4.7,4.8,4.9,4.9,4.9,5,5,5,5,5.1,5.1,5.2,5.3,5.4,5.4,5.6,5.7,5.7,
5.7,5.8,6,6,6,6.3,6.4,6.6,6.9,6.9,6.9,7,7.1,7.2,7.4,7.4,7.7,7.8,7.9,
7.9,8.2,8.5,8.5,8.9,9.2,10.2,10.47,10.5,10.7,11.7,13.2,13.5,14.4,14.5,
14.5,15.1,18.4)
wei.param<-matrix(data=NA,nrow=5,ncol=3,dimnames = list(c(),c("shape", "scale", "prob")))
wei.param[,1]<-c(1.834682,2.720390,3.073429,1.9,1.9)
wei.param[,2]<-c(2.78,2.78,2.78,1.6,2.8710692)
wei.param[,3]<-c(0.49, 0.46, 0.26, 0.26, 0.07)
x=seq(0,20,1)
y1<-dweibull(x,shape=wei.param[1,1],scale=wei.param[1,2])
y2<-dweibull(x,shape=wei.param[2,1],scale=wei.param[2,2])
y3<-dweibull(x,shape=wei.param[3,1],scale=wei.param[3,2])
y4<-dweibull(x,shape=wei.param[4,1],scale=wei.param[4,2])
#Plot
hist(diameters,freq=F,main='',ylim=c(0,.5))
polygon(x, y1,col=rgb(0,0,0,alpha=(1-wei.param[1,3])), border=NA )
lines(x, y1)
lines(x, y2)
lines(x, y3)
lines(x, y4)
答案 0 :(得分:2)
我认为这就是你想要的:
我不知道如何使用基本的R
图片执行此操作,但这里是ggplot2
的代码,我知道的更好。请注意,ggplot2
要求将数据输入为data.frame
。此外,我创建了第二个概率列,以便group
ggplot2
多边形df <- data.frame(x = rep(x, 4), y = c(y1, y2, y3, y4),
Prob = c(
rep(wei.param[1,3], length(y1)),
rep(wei.param[2,3], length(y2)),
rep(wei.param[2,3], length(y2)),
rep(wei.param[4,3], length(y4))))
df$Prob2 = as.factor(df$Prob)
library(scales) # needed for alpha function with ggplot2
library(ggplot2)
example <- ggplot() +
geom_histogram(aes(x = diameters, y = ..density..),
prob = TRUE, fill = alpha('white', 0), color = 'black') +
geom_polygon(data = df, aes( x = x, y = y), color = 'white',
fill = 'white') +
geom_polygon(data = df, aes( x = x, y = y, alpha = Prob,
group = Prob2)) +
geom_polygon() + theme_bw()
ggsave('example.jpg', example, width = 6, height = 4)
。
base
您应该可以使用R
ggplot2
执行类似的操作。您需要做的就是在您的直方图上绘制白色多边形,但在阴影多边形下。如果您决定使用我的?geom_histogram
代码,则可能需要调整bin宽度(有关如何执行此操作的详细信息,请参阅{{1}})。