Вопрос

The following code plots 3 colored planes using lattice's wireframe function. However, I cannot understand why the legend does not change by setting the color groups. I tried to do it manually but I only ended up changing the text color. By the way, does anyone also know how to make the surface transparent by 70%?

library(lattice)
library(akima)

SurfaceData <- data.frame(
               x=rep(seq(0,100,length.out=10),each=10,times=3),
               y=rep(rep(seq(0,100,length.out=10),times=10),times=3),
               z=c(rep(25,100),seq(30,70,length.out=100),seq(95,75,length.out=100)),
               type=factor(rep(c("A","B","C"),each=100))
                          )

wireframe(z~x*y,data=SurfaceData,group=type,
          col.groups=c("red","green","blue"),
          scales = list(arrows=FALSE, col="black",font=10),
          xlab = list("Variable X",rot=30),
          ylab = list("Variable Y",rot=-30),
          zlab = list("Variable Z",rot=90),
          zlim = c(0,100),
          #auto.key=TRUE,
          auto.key=list(text=c("A","B","C"),col=c("red","green","blue"),lines=TRUE),
          par.settings = list(axis.line = list(col = "transparent")),
          )

The result:

enter image description here

Thank you!

Это было полезно?

Решение

To change colors of lines, you should replace auto.key with key and supply list of values for texts and lines.

wireframe(z~x*y,data=SurfaceData,group=type,
          col.groups=c("red","green","blue"),
          scales = list(arrows=FALSE, col="black",font=10),
          xlab = list("Variable X",rot=30),
          ylab = list("Variable Y",rot=-30),
          zlab = list("Variable Z",rot=90),
          zlim = c(0,100),
          key=list(text=list(c("A","B","C"),col=c("red","green","blue")),
                   lines=list(lty=c(1,1,1),col=c("red","green","blue"))),
          par.settings = list(axis.line = list(col = "transparent")),
)

To make colors transparent you can use function rgb(). Here I define new variable mycolors.trans that contain transparent colors and mycolors with the same colors but not transparent for legend entries.

mycolors.trans = rgb(c(255,0,0), 
               c(0,255,0), 
               c(0,0,255),alpha = 70,maxColorValue = 255) 

mycolors = rgb(c(255,0,0), 
                     c(0,255,0), 
                     c(0,0,255),maxColorValue = 255) 

wireframe(z~x*y,data=SurfaceData,group=type,
          col.groups=mycolors.trans,
          scales = list(arrows=FALSE, col="black",font=10),
          xlab = list("Variable X",rot=30),
          ylab = list("Variable Y",rot=-30),
          zlab = list("Variable Z",rot=90),
          zlim = c(0,100),
          #auto.key=TRUE,
          key=list(text=list(c("A","B","C"),col=mycolors),
                   lines=list(lty=c(1,1,1),col=mycolors)),
          par.settings = list(axis.line = list(col = "transparent")),
)

enter image description here

Другие советы

see ?simpleTheme , for the transparence part

    par.settings =  simpleTheme(alpha = 0.7)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top