#r #plot
#r #график
Вопрос:
У меня проблема с пониманием того, как работает аргумент col в plot.
Давайте сначала посмотрим на это:
plot(collection[,"x"], collection[,"y"],
col=rainbow(21300)[order(collection[,"y"])],pch=".")
Цвет почти выровнен по оси y, но да, не полностью.
Теперь давайте сделаем это на:
plot(collection[,"x"], collection[,"y"],
col=rainbow(21300)[order(collection[,"x"])],pch=".")
Я бы ожидал, что цвета будут градиентно перемещаться слева направо, поскольку я упорядочил их по тем же данным, что и те, которые представляют ось x.
Но нет, это полный хаос.
Итак, как это работает?
Ответ №1:
Возможно, ваши данные уже были отсортированы по значению y (или чему-то близкому) для начала. col=
Параметр присваивает цвета каждой точке, которую вы строите, в порядке расположения точек. Когда вы это делаете order()
, вы возвращаете индекс элемента, который принадлежит каждой позиции. Если ваши данные уже отсортированы, это не будет сильно отличаться от текущего местоположения. Но если это не так, вот как вы бы изменили порядок. Это не та последовательность, в которую попадают сами значения. Вместо того чтобы делать order()
, вам, вероятно, следует использовать rank()
. Это задает порядок для каждого элемента на месте.
Вот некоторые примеры данных
y<-cumsum(runif(1000, -.5, 1))
x<-sin(seq(1:length(y))/7 rnorm(length(y),.5,.1))
Вы увидите, что
plot(x,y, col=rainbow(length(y))[order(y)], main="order y")
plot(x,y, col=rainbow(length(y))[order(x)], main="order x")
порядок по y выглядит нормально, потому что данные изначально были расположены в порядке y. X выглядит безумно, потому что, упорядочивая цвета по x, вы не упорядочиваете сами значения x по x. Вы могли бы сделать
plot(x,y, col=rainbow(length(y))[rank(y)], main="rank y")
plot(x,y, col=rainbow(length(y))[rank(x)], main="rank x")
чтобы получить графики, более похожие на те, которые вы ожидали. В качестве альтернативы, вы также могли бы упорядочить данные
plot(x[order(y)],y[order(y)], col=rainbow(length(y)), main="data y")
plot(x[order(x)],y[order(x)], col=rainbow(length(y)), main="data x")