ggplot2 scale_x_continuous пределы или абсолютные - PullRequest
5 голосов
/ 19 марта 2012

Я использую следующую логику ggplot2 v0.9 scale_x_continious в цикле (по названию округа) в попытке построить данные каждого округа на отдельном графике с одинаковыми шкалами x.

MaxDays=365*3;
p <- p + scale_x_continuous(limits=c(0,MaxDays))
p <- p + scale_x_continuous(breaks=seq(0,MaxDays,60))

Логика отлично работает, если во всех округах есть данные> = MaxDate. Однако, если количество дней меньше, чем MaxDate, графики x шкал не будут одинаковыми (то есть 0 - 720 дней)

Как можно установить абсолютное значение вместо предела?

Любая помощь будет принята с благодарностью

############################################
###  Sample Data Below
############################################

# County 1 data
Days=seq(1,30,1)
Qty=Days*10
County=rep("Washington",length(Days))
df1=data.frame(County, Qty, Days)

# County 2 data
Days=seq(1,15,1)
Qty=Days*20
County=rep("Jefferson",length(Days))
df2=data.frame(County, Qty, Days)

# County 1 and 2 data
df3=rbind(df1,df2)

# calculate ranges for x scales
yrng=range(df3$Qty)
xrng=range(df3$Days)

# Scatter Plots
fname=paste("C:/test",".pdf",sep="");
pdf(fname,10,8,onefile=TRUE,paper="a4r");

p <- ggplot()
cnty=unique(df3$County)
n=length(unique(df3$County))
for (i in 1:n){
  df4<-subset(df3, County==cnty[i])
  p <- ggplot(df4, aes(x=Days, y=Qty))
  p <- p + geom_point()
  p <- p + opts(title=cnty[i])
  p <- p + scale_x_continuous(limits=c(xrng[1],xrng[2])) 
  p <- p + scale_x_continuous(breaks=seq(xrng[1],xrng[2],1))
  p <- p + coord_cartesian(xlim=c(xrng[1],xrng[2]))
print(p);
}
dev.off()

1 Ответ

9 голосов
/ 20 марта 2012
p <- p + coord_cartesian(xlim=c(0, MaxDays))

РЕДАКТИРОВАТЬ: на основе комментариев.

Ваша проблема в том, что второй scale_x_continuous() заменяет, а не увеличивает первый, поэтому ограничения не сохраняются.

Вы можете заменить строки

p <- p + scale_x_continuous(limits=c(xrng[1],xrng[2])) 
p <- p + scale_x_continuous(breaks=seq(xrng[1],xrng[2],1))

с

p <- p + scale_x_continuous(limits=c(xrng[1],xrng[2]), 
                            breaks=seq(xrng[1],xrng[2],1))

, который дает что-то вроде этого:

enter image description here

...