построение нескольких наборов различных точек данных на графике в R - PullRequest
1 голос
/ 01 октября 2011

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

sw_sd <- c(0, 20)
sw_r <- c(5, 10)
aa_sd <- c(0, 16)
aa_r <- c(5, 8)
png("5-airline-cals.png")
plot.new()
plot.window(xlim=c(0,25), ylim=c(0,12))
plot(c(aa_sd, aa_r))
plot(sw_sd,sw_r, pch=22, main="Capital Allocation Lines", xlab="Standard Deviation", ylab="Expected Return")
sw_cal=lm(sw_r~sw_sd)
aa_cal=lm(aa_r~aa_sd)
abline(sw_cal, col="forestgreen", lwd=3)
abline(aa_cal, col="blue", lwd=3)
legend(1, 9, c("Southwest Airlines","American Airlines"), cex=0.8, col=c("forestgreen","blue"), lwd=3);
box()
dev.off()

Пары sd - это координаты x, а r - координаты y. Мне нужны оба набора пар x-y на одном графике рассеяния. Это упрощенные данные, но вы поняли идею.

Ответы [ 3 ]

6 голосов
/ 01 октября 2011

Извините за диск по комментарию RTFM. Вот еще некоторые подробности.

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

plot(c(sw_sd,aa_sd),c(sw_r,aa_r), pch = 22, 
        col = rep(c('forestgreen','blue'),each = 2),main="Capital Allocation Lines", 
        xlab="Standard Deviation", ylab="Expected Return")
abline(lm(sw_r~sw_sd),col = 'forestgreen',lwd = 3)
abline(lm(aa_r~aa_sd),col = 'blue',lwd = 3)

Причина, по которой я упомянул points и lines, заключалась в том, что вы спрашивали, как построить несколько наборов точек на одном графике. Общая стратегия с базовой графикой в ​​R состоит в том, что вы инициализируете сюжет одним вызовом plot, а затем добавляете к нему, используя такие вещи, как points, lines, abline и т. Д.

Ваши звонки на номера plot.new и plot.window на самом деле не нужны; если вы только начинаете с R, вам, скорее всего, не понадобится какое-то время их использовать.

Как правило, каждый раз, когда вы звоните plot, R запускает новое графическое устройство. Так что ваши повторные звонки на plot просто возвращаются и начинаются снова. Вы заметите, что полученный график не имеет пределов оси y от 0 до 12. Это потому, что каждый раз, когда вы снова вызываете plot, вы начинаете все заново, как будто предыдущие команды никогда не выполнялись. Именно поэтому другой набор точек не появился.

Наконец, рекомендация читать ?plot немного вводит в заблуждение, поскольку на самом деле ?plot.default немного более информативна для начинающих. У него есть небольшие самородки, такие как возможность прямого прохода по осям x и y, пропуск type = "n" для создания пустого графика с правильными размерами, которые вы затем можете добавить, и т. Д.

3 голосов
/ 01 октября 2011

Быстрый ggplot ответ на основе:

dat <- data.frame(sd=c(0,20,0,16),
                  r=c(5,10,5,8),
                  airline=rep(c("Southwest","American"),each=2))

library(ggplot2)
theme_update(theme_bw())
qplot(sd,r,data=dat,colour=airline)+geom_smooth(method="lm")+
  labs(x="Standard Deviation",y="Expected Return")+
  scale_colour_manual(value=c("forestgreen","blue"))
2 голосов
/ 03 октября 2011

Используя фрейм данных Бена, но с решеткой:

library(lattice)
xyplot(r~sd, data=dat, groups=airline,
   type=c('p', 'r'),
   auto.key=list(space='right'),
   main="Capital Allocation Lines",
   xlab="Standard Deviation", ylab="Expected Return")

Подробную информацию вы найдете в ?panel.xyplot и ?xyplot.

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