2012-05-04 1 views
12

В качестве примера, если я хочу, чтобы нарисовать график с точками 1-5 и добавить пункты 5-9, следующий будет работать:Можно ли изменить илим и xlim, когда сюжет уже нарисован?

> plot(c(1,2,3,4,5), ylim=c(0,10)) 
> points(c(5,6,7,8,9)) 

Однако, если я не знаю заранее, какие номера к материалу -be-добавленные баллы будут (они могут быть 5-9, также могут быть 20-29), я не могу заранее установить илим и xlim. Я хотел бы иметь возможность сделать что-то вроде следующего (что не работает):

> plot(c(1,2,3,4,5)) 
> points(c(5,6,7,8,9), ylim=c(0,10)) 

Возможно ли это?

+2

Наверное, нет, если вы не попробуете что-то вроде пакета 'playwith'. –

+0

Так боялся. Можете ли вы поместить это в ответ, чтобы я согласился? –

+1

Я хотел бы указать, что приведенные ниже решения ggplot2 не _технически удовлетворяют заданию OP, в том смысле, что вам все равно придется перерисовать график _from scratch_, чтобы увидеть изменения. Это то же самое, что и в базовой графике, где вам нужно будет построить график с начала, чтобы изменить пределы оси. Таким образом, ответ BenBolker, вероятно, самый правильный. – joran

ответ

6

(Только для полноты.)

Это почти наверняка невозможно в базовой графике R. Другие ответы указывают, что это можно сделать в ggplot. Это может быть возможно в чем-то вроде пакета playwith, хотя короткий ход игры не показал мне способ сделать это.

3

Вы можете изменить пределы осей в ggplot2. Например,

require(ggplot2) 
data(mpg) 

g = ggplot(mpg, aes(cyl, cty)) + geom_point() + xlim(5, 8) 
g 
g + xlim(4,8) 

Как Бен Бобкер упоминает, что в базовой графике вы определенно не можете сделать это без дополнительных пакетов.

3

с ggplot2 вы можете изменить ось:

df <-data.frame(age=c(10,10,20,20,25,25,25),veg=c(0,1,0,1,1,0,1),extra=c(10,10,20,20,25,25,90)) 
g=ggplot(data=df,aes(x=age,y=veg)) 
g=g+stat_summary(fun.y=mean,geom="point") 
g 

затем

a<-g+coord_cartesian(xlim=c(0,100)) 
a+geom_point(data=df,aes(x=extra,y=veg)) 
2

Будет ли это достаточно хорошо? Это относится к верхней границе ylim в качестве переменного, но технически вы знаете ylim перед добавлением точки:

my.data <- seq(0,5) 
my.points <- seq(5,9) 
plot(my.data, ylim=c(0,max(my.data,my.points))) 
points(my.points) 

Вы также могли бы относиться к нижней границе ylim таким же образом:

my.data <- seq(0,5) 
my.points <- seq(5,9) 
plot(my.data, ylim=c(min(my.data,my.points),max(my.data,my.points))) 
points(my.points) 
Смежные вопросы