2013-05-23 9 views
6

Plamizuję niektóre powierzchnie w R za pomocą pakietu kratowego. Nie mogę znaleźć sposobu na wybranie kolorów powierzchni. Oto przykład:Ręczne definiowanie kolorów modelu szkieletowego

enter image description here

Oto przykład, jak i działki każda:

theseCol=heat.colors(150) 
mm=paste("WB numbers where present\n(",nstoch," sims)",sep="") 
WBnumbers=wbPrev_series 
rownames(WBnumbers)=KList 
colnames(WBnumbers)=iMwbList 
wireframe(WBnumbers, zlim=c(0,max(wbPrev_series,na.rm=TRUE)), colorkey=FALSE, 
        col.regions=theseCol, scales = list(arrows = FALSE), drape = TRUE, 
        main=mm, zlab="", xlab="K", ylab="iMwb") 

Chciałbym na pierwszej powierzchni będzie jak jest, ale dla innych, aby być zabarwione nie przez ich poziomy z, ale przez poziomy z pierwszej powierzchni. Próbowałem wielu rzeczy, ale szkielet zawsze akceptuje kolory, które podaję jako możliwe zakresy dla bieżącej zmiennej.

W każdym razie można to zrobić? Dzięki

+2

Niestety, wygląda to bezbożnie trudne do osiągnięcia w kratownicy. Renderowanie obiektów trójwymiarowych jest częścią pakietu korzystającą z funkcji poziomu C ('wireframePanelCalculations', w' kratownicyPackageSource/src/threeDplot.c'). 'wireframePanelCalculations' jest wywoływane (za pomocą' .Call() ') w funkcji' kratownica ::: panel.3dwire', a to z kolei wywołuje wcześniej zdefiniowaną funkcję R, 'wirePolygon', raz dla każdego aspektu powierzchnia. Wszystko, co przechodzi między funkcjami C i R, to wartości z i wektor poziomów kolorów, a po prostu nie ma sposobu na ominięcie tego. Szkoda! –

Odpowiedz

2

Oto odpowiedź, którą Dave W. opublikował kilka lat temu na liście dyskusyjnej R-help. Prawdopodobnie możesz zgłosić się w górę do całego wątku.

Od: David Winsemius Po poradę w Pomocy (wirefrane) trzeba spojrzeć na odcinku
levelplot o poradę re: odpowiednia specyfikacja do colorkey
i wykonaj odpowiednie linki na stronach pomocy. To, czy dane użytkownika
jest poprawnym wprowadzeniem do modelu krawędziowego, nie można określić na podstawie zawartych w nim informacji, chociaż przypuszczam, że Twój raport sugeruje, że tak.

To niesprawdzone (ponieważ nie było nic do przetestowania) dziki dupą przypuszczenie
po przeczytaniu materiału Wskazałam:

wireframe(data.m,aspect = c(0.3), shade=TRUE, screen = list(z = 0, x = 
-45), 
    light.source = c(0,0,10), distance = 
0.2,zlab="Freq",xlab="base",ylab="Fragment", 
    col=level.colors(x, at = do.breaks(range(data.m), 30), 
        col.regions = colorRampPalette(c("red", "white", 
"blue")(30)) 
     ) 

EDIT: Na życzenie Josha, Grałem około trochę. Poniższe zastosuje cieniowanie kolorów (zasłona):

wireframe(dmat,drape=TRUE,col='black',col.regions = colorRampPalette(c("red", "white", "blue"))(30)) 

Która ustawia kolory "zasłona", ale nie same linie siatki. To wielka szkoda, że ​​wireframe nie respektuje par(new=TRUE), ponieważ gdyby tak było, moglibyśmy pokroić matrycę danych na zakresy z i przesłonić jeden kolor na raz.

Po powrocie do domu będę musiał sprawdzić moje "archiwum" starych eksperymentów z grafiką R, ale wydaje mi się, że skorzystałem z pakietu scatterplot3d, aby uzyskać zależne od danych kolory siatki.

+0

Prawdopodobnie nie warto publikować niesprawdzonych domysłów, które, jeśli zrozumiałem to poprawnie, zostały zgłoszone później w wątku, aby nie wyszło;). Jeśli to rzeczywiście działa, czy możesz nam pokazać, jak? –

+0

Witajcie, przykro mi to mówić, ale to nie działa. Oddaliłem się teraz, ponieważ brzmi to jak niemożliwe zadanie. Dzięki za odpowiedzi. – lourencoj

Powiązane problemy