график рассеяния для отсортированных данных в R - PullRequest
5 голосов
/ 01 апреля 2012

У меня есть следующие данные:

subject = c("S01","S02","S03","S04","S05","S06","S07","S08","S09","S10")
post    = c(100,80,75,120,85,90,95,90,110,100)
pre     = c(45,60,80,75,45,60,55,50,35,40)
data1 = as.data.frame(cbind(subject, post, pre))

Затем я отсортировал данные по столбцу записи:

data1 = data1[order(data1$post),]

В конце я хочу получить точечный графиксравнивая столбцы post и pre, соответственно в разных цветах.Ось X - это просто индекс фрейма данных, но помеченный номером субъекта, поэтому метка оси будет в порядке номера субъекта, поскольку фрейм данных отсортирован по столбцу записи

Если я это сделаюэто:

plot(data1$post)

У меня есть гистограмма, даже не точечный график.Это причина того, что столбец записи является фактором?Я пробовал «as.numeric» для столбцов post и pre, но результат один и тот же

Если я сделаю это:

plot(data1$post,data1$pre)

У меня точечный график, но индекс идетот 1 до 20. Таким образом, вместо того, чтобы сравнивать разброс по одному и тому же индексу от 1 до 10, у меня есть два разброса с индексами от 1-10 до 11-20.

Любая помощь, указывающая на мои ошибки, будетс благодарностью.

1 Ответ

4 голосов
/ 01 апреля 2012

Неверно называть это «диаграммой рассеяния»; одна из переменных является категориальной, а значения являются парными. Это действительно вариант точечного графика. Практика использования as.data.frame(cbind(.)) создала чудовищность данных.

> data1
   subject post pre
1      S01  100  45
10     S10  100  40
9      S09  110  35
4      S04  120  75
3      S03   75  80
2      S02   80  60
5      S05   85  45
6      S06   90  60
8      S08   90  50
7      S07   95  55

И все эти столбцы являются факторами, а не числами, как было явно задумано:

Используйте этот код вместо:

data1 = data.frame(subject=subject, post=post, pre=pre)
data1 = data1[order(data1$post),]; 
plot(data1$pre,type="p",ylim=range(data1$pre,data1$post), 
      xaxt="n", ylab="Pre/Post Scores: black=Pre, red=Post")
points(data1$post,col='red')
axis(1, at=1:10, labels=levels(data1$subject)[order(post)])

Последняя строка могла быть:

axis(1, at=1:10, labels=as.character(data1$subject))) # since the set was sorted by `post`

enter image description here

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