R печать групп точек данных в разных цветах - PullRequest
0 голосов
/ 30 января 2019

Я делаю некоторую базовую статистику в R и пытаюсь иметь разные цвета для каждой итерации цикла.Таким образом, все точки данных для i = 1 должны иметь одинаковый цвет, все точки данных для i = 2 должны иметь одинаковый цвет и т. Д. Лучше всего было бы иметь разные цвета для варьирующегося i, например, от желтого до синего.(Я уже пытался разобраться с Colorramp и т. Д., Но мне не удалось это сделать.)

Спасибо за вашу помощь.

library(ggplot2)

#dput(thedata[,2])
#c(1.28994585412464, 1.1317747077577, 1.28029504741834, 1.41172820353708, 
#1.13172920065253, 1.40276516298315, 1.43679599499374, 1.90618019359643, 
#2.33626745030772, 1.98362330686504, 2.22606615548188, 2.40238822720322)
#dput(thedata[,4])
#c(NA, -1.7394747097211, 2.93081902519318, -0.33212717268786, 
#-1.78796119503752, -0.5080871442002, -0.10110379236627, 0.18977632798691, 
#1.7514277696687, 1.50275797771879, -0.74632159611221, 0.0978774103243802)

#OR
#dput(thedata[,c(2,4)])
#structure(list(LRUN74TTFRA156N = c(1.28994585412464, 1.1317747077577, 
#1.28029504741834, 1.41172820353708, 1.13172920065253, 1.40276516298315, 
#1.43679599499374, 1.90618019359643, 2.33626745030772, 1.98362330686504, 
#2.22606615548188, 2.40238822720322), SELF = c(NA, -1.7394747097211, 
#2.93081902519318, -0.33212717268786, -1.78796119503752, -0.5080871442002, 
#-0.10110379236627, 0.18977632798691, 1.7514277696687, 1.50275797771879, 
#-0.74632159611221, 0.0978774103243802)), row.names = c(NA, 12L
#), class = "data.frame")

x1=1
xn=x1+3

plot(0,0,col="white",xlim=c(0,12),ylim=c(-5,7.5))
for(i in 1:3){
y=thedata[x1:xn,4]
x=thedata[x1:xn,2]
reg<-lm(y~x)
points(x,y,col=colors()[i])
abline(reg,col=colors()[i])
x1=x1+4
xn=x1+3
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Основная идея colorRamp и colorRampPalette состоит в том, что они функционалы - они являются функциями , которые возвращают функции .

На странице справки:

colorRampPalette возвращает функцию, которая принимает целочисленный аргумент (необходимое количество цветов) и возвращает вектор символов цвета (см. Rgb), интерполируязаданная последовательность (аналогично heat.colors или terrain.colors).

Итак, мы получим функцию желто-синей палитры из colorRampPalette, а затем передадим ееколичество цветов, которое мы хотим вдоль этой рампы, чтобы фактически получить цвета:

# create the palette function
my_palette = colorRampPalette(colors = c("yellow", "blue"))
# test it out, see how it works
my_palette(3)
# [1] "#FFFF00" "#7F7F7F" "#0000FF"
my_palette(5)
# [1] "#FFFF00" "#BFBF3F" "#7F7F7F" "#3F3FBF" "#0000FF"

# Now on with our plot
x1 = 1
xn = x1 + 3
# Set the number of iterations (number of colors needed) as a variable:
nn = 3
# Get the colors from our palettte function
my_cols = my_palette(nn)

# type = 'n' means nothing will be plotted, no points, no lines
plot(0, 0, type = 'n',
     xlim = c(0, 12),
     ylim = c(-5, 7.5))

# plot
for (i in 1:nn) {
  y = thedata[x1:xn, 2]
  x = thedata[x1:xn, 1]
  reg <- lm(y ~ x)
  # use the ith color
  points(x, y, col = my_cols[i])
  abline(reg, col = my_cols[i])
  x1 = x1 + 4
  xn = x1 + 3
}

Вы можете поиграть с простой визуализацией палитры - попробуйте следующий код для различных значений n.Вы также можете попробовать разные варианты, возможно разные стартовые цвета.Мне больше нравятся результаты с аргументом space = "Lab" для палитры.

n = 10
my_palette = colorRampPalette(colors = c("yellow", "blue"), space = "Lab")
n_palette = my_palette(n)
plot(1:n, rep(1, n), col = n_palette, pch = 15, cex = 4)

enter image description here

0 голосов
/ 30 января 2019

Помимо отсутствия воспроизводимого примера, у вас, похоже, есть некоторые заблуждения.

Во-первых, функция colors не принимает числовой аргумент, см. ?colors.Поэтому, если вы хотите получать разные цвета в каждой итерации, вам нужно назвать его как colors()[i].Код должен выглядеть примерно так (при отсутствии воспроизводимого примера):

for (i in 20:30){
    plot(1:10, 1:10, col = colors()[i])
}

Пожалуйста, имейте в виду, что вызов x1 и xn в вашей первой и второй строках внутри дляloop, перед их определением также приведет к ошибке.

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