R: Создайте базовый участок массива и цвет по уровням затемнения массива. - PullRequest
2 голосов
/ 25 февраля 2020

Привет, я хочу знать, как раскрасить базовый участок данных массива для разных уровней массива (имена dimnames 1, 2 и 3)

x <- rnorm(1000); dim(x) <- c(10,10,10)

dimnames(x) = list(c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"),
                   c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"),
                   c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"))
plot(x, col=as.factor(dimnames(x)[[3]]))

не дал мне желаемых результатов, как. ..

plot(x[1:100], col=as.factor(dimnames(x)[[3]]))

не дал мне один цвет для первых 100 чисел

Я хочу знать, как я могу раскрасить базовый график разными наборами по размерам в базовом графике.

Ответы [ 3 ]

2 голосов
/ 25 февраля 2020

Вам необходимо получить обратно индекс массива, то есть к какому подмассиву принадлежит точка данных, и предоставить что-то, пока ваши данные указывают на график, например:

plotfunc = function(this_array,index_to_plot){
array_index = 1+(index_to_plot - 1) %/% prod(dim(this_array)[1:2])
COLS=as.factor(dimnames(this_array)[[3]])[array_index]
plot(this_array[index_to_plot],col=COLS)
}

Если вы строите график 1 : 100 из массива x вашего предоставленного, вы строите первый подмассив, и все черное:

plotfunc(x,1:100)

enter image description here

Мы можем попробовать из первые 50 из первых 3 подмассивов:

plotfunc(x,c(1:50,101:150,201:250))

enter image description here

0 голосов
/ 25 февраля 2020

Я думаю, что получил то, что хотел, по крайней мере с массивом 10x10x10, я должен проверить его для разных размеров массива. Также сделайте его более строгим, убедившись, что для array_level можно выбрать только 1,2 или 3.

plotfunc2 = function(this_array,index_to_plot,array_level)
if (array_level == 1){
  plot(this_array[index_to_plot])
} else if (array_level == 2){
  array_index = 1+(index_to_plot - 1) %/% prod(dim(this_array)[1:2])
  COLS=as.factor(dimnames(this_array)[[3]])[array_index]
  plot(this_array[index_to_plot],col=COLS)
} else if (array_level == 3){
  array_index = rep(rep(c(1:dim(this_array)[3]), each = dim(this_array)[3]), times = dim(this_array)[3])
  COLS=as.factor(dimnames(this_array)[[2]])[array_index]
  plot(this_array[index_to_plot],col=COLS)
}

plotfunc2 (x, 1: 500,3) дает

enter image description here

0 голосов
/ 25 февраля 2020

Спасибо за ввод

Я попытался настроить функцию, чтобы выбрать уровень массива, который я хочу, чтобы цвета были приняты. Но я не могу понять, как правильно получить самый низкий уровень, так как он принимает только уровни факторов более 1:10, и если я go на самом низком уровне массива (наборы из 10), я не могу понять, чтобы получить правильную формулу .

plotfunc2 = function(this_array,index_to_plot,array_level)
if (array_level == 1){
  plot(this_array[index_to_plot])
} else if (array_level == 2){
  array_index = 1+(index_to_plot - 1) %/% prod(dim(this_array)[1:2])
  COLS=as.factor(dimnames(this_array)[[3]])[array_index]
  plot(this_array[index_to_plot],col=COLS)
} else if (array_level == 3){
  array_index = 1+(index_to_plot - 1) %/% dim(this_array)[3]
  COLS=as.factor(dimnames(this_array)[[2]])[array_index]
  plot(this_array[index_to_plot],col=COLS)
}

enter image description here

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