Scatterplot с цветными группами - базовый R-сюжет - PullRequest
5 голосов
/ 12 декабря 2011

У меня есть простой график рассеяния

x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)

Я хочу построить plot(x,y), но цвет точек должен иметь цветовую кодировку на основе z.

Кроме того, я хотел бы иметь возможность определить, сколько групп (и, следовательно, цветов) должно быть z.И что эта группировка должна быть устойчивой к выбросам (возможно, разделить плотность z на n группы равной плотности).

До сих пор я делаю это вручную, есть ли способ сделать это автоматически?

Примечание: Я хочу сделать это с базой R, а не с ggplot.

1 Ответ

11 голосов
/ 12 декабря 2011

Вы можете передать вектор цветов параметру col, так что это просто вопрос определения групп z таким образом, который имеет смысл для вашего приложения.В базе есть функция cut() или в Hmisc cut2(), которая предлагает немного больше гибкости.Чтобы помочь в выборе разумных цветовых палитр, пакет RColorBrewer неоценим.Вот быстрый пример после определения x,y,z:

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow"))
plot(x,y, col = as.character(z.cols), pch = 16)

enter image description here

Очевидно, вы можете добавить legend вручную.К сожалению, я не думаю, что все типы графиков принимают векторы для аргумента col, но type = "p", очевидно, работает.Например, plot(x,y, type = "l", col = as.character(z.cols)) выходит для меня одним цветом.Для этих графиков вы можете добавить разные цвета с помощью lines() или segments() или любой другой команды низкоуровневого построения, которую вам нужно использовать.Посмотрите ответ @Andrie, чтобы сделать это с type = "l" графиками в базовой графике здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...