Twoje rozwiązanie przypisuje kolor do rankingu Twoich danych. Jeśli o to ci chodziło, to świetnie.
Jednakże, jeśli naprawdę miał na myśli, że wartość danych należy określić kolor, to tutaj jest rozwiązanie:
pierwsze, Twój kod:
#Create Dataset
set.seed(1)
x <- runif(100)
y <- runif(100)
z <- y*x
par(mfrow=c(1,2))
#Assign colors, based on z vector
Data <- data.frame(Order=1:length(z),z=z)
Data <- Data[order(Data$z),]
Data$col <- rainbow(length(z))
orderedcolors <- Data[order(Data$Order),'col']
plot(x,y,col=orderedcolors, main="Yours")
Następny mój kod. Używam funkcji colorRamp
, która tworzy funkcję, która interpoluje liniowo między kolorami, biorąc pod uwagę wejście do funkcji. Ponieważ wejście do colorRamp
musi znajdować się w zakresie [0; 1], najpierw zdefiniować trochę funkcji pomocnika range01
który skaluje dane pomiędzy 0 a 1. Wreszcie, ponieważ colorRamp
daje moc w wartościach RGB, używam apply
i rgb
uzyskać te wartości z powrotem do kolorów, które plot
rozumie:
range01 <- function(x)(x-min(x))/diff(range(x))
rainbow(7)
cRamp <- function(x){
cols <- colorRamp(rainbow(7))(range01(x))
apply(cols, 1, function(xt)rgb(xt[1], xt[2], xt[3], maxColorValue=255))
}
#Plot x vs y, colored by z
plot(x,y,col=cRamp(z), main="Mine")
Wyniki. Zwróć uwagę na inny rozkład kolorów w pobliżu osi.
Mówisz 'zamówienie (zlecenie())', mówię 'Rank()'. Pomidor, tom-ah-to. – joran
Kiedy zobaczyłem twoją odpowiedź, zdałem sobie sprawę, że 'rank()' ma sens w sensie koncepcyjnym; Po prostu o tym nie pomyślałem! –