R - как использовать содержимое одного вектора в качестве символа в сюжете? - PullRequest
6 голосов
/ 12 февраля 2010

У меня есть два вектора чисел равной длины. Как построить первый вектор, используя соответствующий элемент во втором в качестве печатного символа? (Справочная информация: я отсортировал первый столбец, а второй столбец содержит исходные индексы. Я хочу использовать индексы в качестве печатного символа, чтобы я мог видеть, какие точки данных являются выбросами, поскольку каждое число представляет один цикл данных).

 > x
$x
 [1]   25   29   30   34   38  572  700  733  870  879  899  934  982 1054 1135 1258
[17] 1315 1491 1685 1700 2069 2131 2284 3498 3506 4467 4656 5633 6642 8348

$ix
 [1] 23  3 18 30 13  8  4 14 11 17 12 29  9 15 19 16  7  1 20  2  6 28 21 10  5 22 24 26
[29] 25 27

Первый вектор - x $ x, второй - x $ ix (результаты вызова sort с index.return = TRUE)

Я пробовал plot (x $ x, pch = str (x $ ix)), но он численно обрабатывает x $ ix. Если бы это был Python, я бы сделал что-то вроде strings = [str (x) для x в x $ ix]. но это R, и я забыл большую часть того, что знал раньше.

Я обнаружил, что вы можете сделать as.character (x $ ix), чтобы получить строки,

> as.character(x$ix)
 [1] "23" "3"  "18" "30" "13" "8"  "4"  "14" "11" "17" "12" "29" "9"  "15" "19" "16"
[17] "7"  "1"  "20" "2"  "6"  "28" "21" "10" "5"  "22" "24" "26" "25" "27"

и я могу использовать это как вход для pch. Но используется только первый символ (и согласно документам это нормально).

Я знаю, что есть способ сделать это; Я сделал это в колледже. Но я не могу на всю жизнь вспомнить, как я это сделал.

Диаграмма без меток: alt text

Диаграмма с метками, но неверная: alt text

Ответы [ 3 ]

10 голосов
/ 12 февраля 2010

Это должно работать:

x = 1:4
y = x
plot(x, y, ann=F, axis=F, col="blue", pch=16)
text(x, y, labels=c("1st", "2nd", "3rd", "4th"), col="red", pos=c(3,4,4,1), offset=0.6)

Просто преобразуйте ваш вектор без данных (тот, который содержит метки) в символьный вектор: label = as.character (label_vector)

и затем замените это третьим аргументом в строке 4 выше.

Функция «Текст» довольно универсальна, поскольку вы можете передавать различные аргументы - например, (как в примере выше) вы можете установить цвет текста, отличный от ваших точек данных, используя «col»; Вы также можете указать положение (относительно точки данных, аннотируемой данной текстовой меткой) для каждой текстовой метки отдельно. Часто бывает полезно, чтобы текстовые метки не перекрывали, например, одну из осей, что и произошло в первый раз, когда я запустил этот пример без установки «pos». Поэтому, установив «pos» (как c (3, 4, 4, 1)), я установил положение текстовых меток как «вверху», «вправо», «вправо» и «внизу» - перемещение первых данных Направьте его вверх, чтобы он не коснулся нижней оси X, и сдвиньте четвертую вниз, чтобы он не коснулся верхней оси X. Кроме того, используя «смещение» (значение по умолчанию 0,5), вы можете указать величину регулировки положения.

3 голосов
/ 12 февраля 2010

Вот способ сделать это с помощью пакета ggplot2:

library(ggplot2)
x <- rnorm(10)
y <- rnorm(10)
labs <- 1:10
ggplot()+geom_text(aes(x=x,y=y,label=labs))

enter image description here

0 голосов
/ 25 августа 2011

Вот очень простое решение с использованием lattice:

dat <- data.frame(x = rnorm(10), y = rnorm(10),
                  labs = as.character(1:10))
xyplot(y~x,data = dat,panel = function(x,labs){
                                 panel.text(x,y,labels = labs)},
       labs = dat$labs)

enter image description here

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