Можно ли настраивать точки цветового графика на графике рассеяния при использовании функции графика? - PullRequest
0 голосов
/ 05 апреля 2020

Мои данные выглядят примерно так:

x = A, A, B, C, D, E, E, F, G y = 1, 0, 2, 3, 4, 5 , 0, 6, 7

Как сделать так, чтобы каждая альтернативная точка данных оси X имела другой цвет? Например, в моих данных я хотел бы, чтобы точки A, C, E и G были одного цвета, B, D, F - другого, а затем имели бы точки, где значение равно третьему цвету? Я использовал pch = и col=, чтобы изменить цвет и форму всего, но возможно ли изменить определенные c точки?

Или мне пришлось бы строить два разных графика на одном и том же построить, а затем изменить цвет каждого графика, а затем есть третье правило для нулей? Единственная проблема с этим заключается в том, что, поскольку мои переменные не являются числовыми, а данные должны чередоваться, я не могу понять, как их построить.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Привет, конечно, это возможно в базовом графике R, я бы сделал это, используя коэффициент для вашей переменной группировки, вам даже не нужно было бы задавать R специфицированные c значения coulur, потому что это сделало бы это автоматически c для факторов :


x= 1:10
y = sample(1:20, 10, replace= T)
group = factor(sample(LETTERS[1:9],10, replace= T ))
df<-data.frame(x,y,group)

#> head(df)
#  x  y group
#1 1 16     B
#2 2  7     D
#3 3 10     D
#4 4 19     I
#5 5  3     C
#6 6 13     I


plot(x,y, col=group, pch=20, cex= 2)


enter image description here

0 голосов
/ 05 апреля 2020

Если это ваши данные:

x = c('A', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H')
y = c(1, 0, 2, 3, 4, 5, 0, 6, 0)

Затем выберите три цвета:

cols <- c("orange2","green4","tomato3")

И создайте цветовой вектор на основе ваших критериев. Вы можете использовать ifelse для определения индекса, который будет использоваться для вектора cols.

col <- cols[ifelse(x %in% c('A','C','E','G'), 1,  # orange
              ifelse(x %in% c('B','D','F'), 2,    # green
                  ifelse(y==0, 3,                 # tomato
                                  4)))] # no 4th colour, so NA (the points won't appear)

col
# "orange2" "orange2" "green4"  "orange2" "green4"  "orange2" "green4" "orange2" "tomato3"

Длина col такая же, как у ваших данных, и, поскольку R векторизует, все работает.

plot(1:length(y), y, xaxt="n", las=1, xlab="x", col=col, pch=20, cex=3)
axis(side=1, at=1:length(y), labels=x)

enter image description here

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