2013-06-25 3 views
0

Я хочу построить 2 графика в 1 кадре. В принципе, я хочу сравнить результаты.Несколько участков в R

В любом случае, код, который я попытался это:

plot(male,pch=16,col="red") 
    lines(male,pch=16,col="red") 
    par(new=TRUE) 
    plot(female,pch=16,col="green") 
    lines(female,pch=16,col="green") 

Когда я запускаю его, я получаю 2 участка в кадре, но меняет свою ось у. Добавлен мой сюжет ниже. В любом случае, значения оси Y составляют -4, -4, -3, -3, ... Это похоже на то, что оба графика отображают свою ось. enter image description here

Просьба помочь.

Благодаря

+1

Просьба предоставить данные, чтобы мы могли запускать ваш код. –

+0

Сделайте любой случайный вектор. Например, мужчина <-rnorm (10,1); женщина <-rnorm (10,1) –

+1

Использование 'ylim' для обоих вызовов' plot' будет работать. –

ответ

4

Вам не нужен второй plot. Просто используйте

> plot(male,pch=16,col="red") 
> lines(male, pch=16, col = "red") 
> lines(female, pch=16, col = "green") 
> points(female, pch=16, col = "green") 

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

1

Для этого типа участка мне обычно нравится строить с ggplot2 намного лучше. Основная причина: он отлично делится на более чем две строки без большого количества кода.

Недостатком данных вашего образца является то, что он недоступен в качестве data.frame, который требуется для ggplot2. Кроме того, в каждом случае вам нужна x-переменная для построения против. Таким образом, сначала создадим data.frame из ваших данных.

dat <- data.frame(index=rep(1:10, 2), vals=c(male, female), group=rep(c('male', 'female'), each=10)) 

Что оставляет нас с

> dat 
    index   vals group 
1  1 -0.4334269341 male 
2  2 0.8829902521 male 
3  3 -0.6052638138 male 
4  4 0.2270191965 male 
5  5 3.5123679143 male 
6  6 0.0615821014 male 
7  7 3.6280155376 male 
8  8 2.3508890457 male 
9  9 2.9824432680 male 
10 10 1.1938052833 male 
11  1 1.3151289227 female 
12  2 1.9956491556 female 
13  3 0.8229389822 female 
14  4 1.2062726250 female 
15  5 0.6633392820 female 
16  6 1.1331669670 female 
17  7 -0.9002109636 female 
18  8 3.2137052284 female 
19  9 0.3113656610 female 
20 10 1.4664434215 female 

Обратите внимание, что моя команда принимает у вас есть 10 значений данных каждый. Эта команда должна быть скорректирована в соответствии с вашими фактическими данными.

Теперь мы можем использовать могучую силу ggplot2:

library(ggplot2) 
ggplot(dat, aes(x=index, y=vals, color=group)) + geom_point() + geom_line() 

Вызов выше состоит из трех элементов: ggplot инициализирует сюжет, рассказывает R использовать dat в качестве источника данных и определяет сюжет эстетику или лучше : На какие эстетические свойства сюжета (например, цвет, положение, размер и т. Д.) Влияют ваши данные. Мы используем значения x и, как и ожидалось, и, кроме того, устанавливаем эстетическую переменную группировки color, что делает ggplot автоматически построением двух групп с разными цветами. Наконец, мы добавляем две геометрии, которые в значительной степени делают то, что написано выше: рисовать линии и рисовать точки.

Результат:

Plot of your data using ggplot

Если вы сохранили свои данные стандартным образом в R (в data.frame), в итоге вы с одной строки кода. И если после нескольких тысяч лет эволюции вы хотите добавить еще один пол, это еще одна строка кода.

Смежные вопросы