/ / Utwórz wykres 3D Kolorowy W zależności od osi Z - r, 3d, wykres

Utwórz wykres 3D w kolorze zgodnym z osią Z - r, 3d, wykres

 library(Sleuth2)

mlr<-lm(ex1222$Buchanan2000~ex1222$Perot96*ex1222$Gore2000)


for (i in 0:3) {
assign(paste("betaHat", i, sep=""),
summary(mlr)$coeff[i+1,1])
}

x<-sort(ex1222$Perot96)
y<-sort(ex1222$Gore2000)


z1 <- outer(x, y, function(a,b) betaHat0+betaHat1*a+betaHat2*b+betaHat3*a*b)
nrz <- nrow(z)
ncz <- ncol(z)

# Create a function interpolating colors in the range of specified colors
jet.colors <- colorRampPalette( c("blue", "red") )

# Generate the desired number of colors from this palette
nbcol <- 100
color <- jet.colors(nbcol)

# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]

# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)

persp(x, y, z1, col=color[facetcol],theta=-30, lwd=.3,xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan")

Dzień dobry,

Próbuję pokolorować powyższą fabułę. Myślałem, że chcę mieć wyższe wartości ciemniejszych odcieni czerwieni „z” (lub naprawdę dowolnego koloru).

Każda pomoc dotycząca tego, jak to się stało, byłaby bardzo mile widziana.

Również możesz zaproponować inną funkcję, aby tak się stało.

Dziękuję Ci!

edit .... Umieściłem mój nowy kod po obejrzeniu przykładu na? persp. Chciałbym zmienić kolor i nie jestem zbyt zadowolony z czytelności nowej fabuły</ strong>

Odpowiedzi:

5 dla odpowiedzi № 1

Zmodyfikowałem twój kod trochę.

library(Sleuth2)

Ogólnie lepiej jest używać data argument niż użycie zmiennych predykcyjnych wyodrębnionych z ramki danych za pośrednictwem $:

mlr<-lm(Buchanan2000~Perot96*Gore2000,data=ex1222)

Możemy użyć expand.grid() i predict() uzyskać wyniki regresji w czysty sposób:

perot <- seq(1000,40000,by=1000)
gore <-  seq(1000,400000,by=2000)

Jeśli chcesz oceniać aspekty w miejscach obserwacji, możesz użyć perot <- sort(unique(ex1222$Perot96)); gore <- sort(unique(ex1222$Gore2000)) zamiast.

pframe <- with(ex1222,expand.grid(Perot96=perot,Gore2000=gore))
mlrpred <- predict(mlr,newdata=pframe)

Teraz przekonwertuj predykcje na macierz:

nrz <- length(perot)
ncz <- length(gore)
z <- matrix(mlrpred,nrow=nrz)

Wybrałem przejście z jasnoczerwonego (#ffcccc, czerwony z odrobiną niebieskiego / zielonego) do ciemnoczerwonego (#cc0000, trochę czerwieni z niczym innym).

jet.colors <- colorRampPalette( c("#ffcccc", "#cc0000") )

Możesz również użyć grep("red",colors(),value=TRUE) aby zobaczyć, co wbudowało czerwone R.

# Generate the desired number of colors from this palette
nbcol <- 100
color <- jet.colors(nbcol)

# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)

persp(perot, gore, z,
col=color[facetcol],theta=-30, lwd=.3,
xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan")

wprowadź opis obrazu tutaj

Mówisz, że jesteś „niezbyt zadowolony z czytelności” fabuły, ale to nie jest zbyt specyficzne… Spędziłbym trochę czasu z ?persp strona, aby zobaczyć, jakie są niektóre opcje ...

Innym wyborem jest rgl pakiet:

library(rgl)
## see ?persp3d for discussion of colour handling
vertcol <- cut(z, nbcol)
persp3d(perot, gore, z,
col=color[vertcol],smooth=FALSE,lit=FALSE,
xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan")

wprowadź opis obrazu tutaj

Warto też spojrzeć na to scatter3d z car pakiet (są inne posty na SO opisujące, jak poprawić niektóre z jego właściwości graficznych).

library(car)
scatter3d(Buchanan2000~Perot96*Gore2000,data=ex1222)

wprowadź opis obrazu tutaj