问题描述
我正在尝试更改 3d 条形图的颜色,以便颜色从绿色变为黄色、橙色、浅红色、红色、深红色。然而,每当我绘制它时,看起来颜色在绿色之后开始重复。有什么可以解决的吗?我得到的输出是:
我想要的输出是这样的: enter image description here
这是代码,我正在使用。它给了我第一张照片。那不是想要的。我希望颜色看起来像第二张图片中的样子。
library(latticeExtra)
myPalette <- colorRampPalette(rev(c("red2","tomato2","red4","orange","gold1","forestgreen")))(6)
k <- read.table(text = 'x y z
NotKnown 0 Critical
NotKnown 0 Substantial
NotKnown 0 Significant
NotKnown 0 Moderate
NotKnown 0 Negligible
NotLikely 2 Critical
NotLikely 5 Substantial
NotLikely 7 Significant
NotLikely 0 Moderate
NotLikely 0 Negligible
Reasonable 0 Critical
Reasonable 1 Substantial
Reasonable 9 Significant
Reasonable 1 Moderate
Reasonable 0 Negligible
Likely 0 Critical
Likely 0 Substantial
Likely 1 Significant
Likely 0 Moderate
Likely 0 Negligible
VeryLikely 0 Critical
VeryLikely 0 Substantial
VeryLikely 0 Significant
VeryLikely 0 Moderate
VeryLikely 0 Negligible',header=TRUE)
k$x <- factor(k$x,levels = c("VeryLikely","Likely","Reasonable","NotLikely","NotKnown"))
k$z <- factor(k$z,levels= c("Critical","Substantial","Significant","Moderate","Negligible"))
cloud(y~z+x,k,panel.3d.cloud=panel.3dbars,col.facet=myPalette,xbase=0.8,ybase=0.8,xlab= "Severity",ylab="Probability",zlab="Number of Risks",scales=list(arrows=FALSE,col=1),par.settings = list(axis.line = list(col = "transparent")))
解决方法
我想这就是你要找的
assign.color <- function(coordinate) {
if (sum(coordinate) == 2)
return("red4")
if (sum(coordinate) == 3)
return("red2")
if (sum(coordinate) == 4)
return("tomato2")
if (sum(coordinate) == 5)
return("orange")
if (sum(coordinate) == 6)
return("gold1")
if (sum(coordinate) >= 7)
return("forestgreen")
}
k$x.int <- as.integer(k$x)
k$z.int <- as.integer(k$z)
k$color <- apply(k,MARGIN = 1,FUN = function (row) {
return(assign.color(as.integer(c(row["x.int"],row["z.int"]))))
})
k$colorCode <- apply(k,FUN = function(row) {
return(colorRampPalette(row["color"])(6)[1])
})
cloud(y~z+x,k,panel.3d.cloud=panel.3dbars,col.facet=k$colorCode,xbase=0.8,ybase=0.8,xlab= "Severity",ylab="Probability",zlab="Number of Risks",scales=list(arrows=FALSE,col=1),par.settings = list(axis.line = list(col = "transparent")))
关键是要了解函数 col.facet
中的参数 cloud
也接受一个 vector
,该 User.annotate("selecting user names").select(:name)
# SELECT "users"."name" FROM "users" /* selecting user names */
User.annotate("selecting","user","names").select(:name)
# SELECT "users"."name" FROM "users" /* selecting */ /* user */ /* names */
可以与您的数据点的数量一样长。