2012-02-05 47 views
3

ggplot2自动调整数据点的ylim。有没有办法调整ylimstat_summary用stat_summary自动调整ylim

df <- structure(list(Varieties = structure(c(2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L), .Label = c("F9917", "Hegari", "JS263", 
"JS2002"), class = "factor"), Priming = structure(c(2L, 2L, 2L, 
2L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 
4L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 
1L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 
3L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L), .Label = c("CaCl2", "Dry", 
"Hydropriming", "KNO3", "OnFarmpriming"), class = "factor"), 
    PH = c(225.8, 224.26, 228.9, 215.82, 230.3, 227.7, 232.8, 
    221.1, 260.2, 230.8, 236.75, 230.5, 250.56, 230.74, 240.64, 
    226.7, 268.4, 233.4, 243.33, 232.7, 252.04, 233.1, 237.14, 
    220.6, 265.55, 234.93, 240.04, 218.21, 300.55, 245, 243.5, 
    234.65, 253.3, 233.5, 238.62, 225.93, 255.74, 233.64, 238.1, 
    230.93, 246, 240.33, 246.08, 221.7, 250.54, 242.87, 251, 
    225.32, 251.47, 245.4, 266.74, 227.73, 290.62, 246.68, 256.4, 
    225.83, 282.67, 240.58, 258.35, 235.87)), .Names = c("Varieties", 
"Priming", "PH"), class = "data.frame", row.names = c(NA, 60L 
)) 

p1 <- ggplot(data=df, aes(x=Varieties, y=PH, group=Priming, shape=Priming, colour=Priming))+ 
    stat_summary(fun.y=mean, geom="point", size=2, aes(group=Priming, shape=Priming, colour=Priming))+ 
    theme_bw() 
p1 <- p1 + stat_summary(fun.y=mean, geom="line", aes(group=Priming, shape=Priming, colour=Priming)) 
print(p1) 

See

见stat_summary值ylim额外的空间。预先感谢您的帮助和时间。

+0

在下一个版本中,ylim将根据统计计算后的范围进行调整。 – kohske 2012-02-05 03:54:35

+0

Github上有此版本吗? – MYaseen208 2012-02-05 04:10:07

+0

@ MYaseen208是的,[这里](https://github.com/hadley/ggplot2)。您可能需要当前的开发版本。或者你可以等到三月份,它会(希望能够越过你的手指)被释放。 – joran 2012-02-05 04:12:35

回答

3

这是一种方法,使用plyr密谋

df <- ddply(df, .(Varieties, Priming), transform, meanPH = mean(PH)) 
ggplot(df, aes(Varieties, meanPH)) + 
    geom_point() + 
    geom_line(aes(group = Priming, color = Priming)) 
3

目前的“官方”的答案是0.8.9,相信之前来准备数据,你不能,至少不会自动,而不是没有像Ramnath所指示的那样预处理数据。大多数人提出这个问题或者它的一些变体,都是指向使用coord_cartesian手动设置限制。

原因stat_summary的行为这种方式是它那种假定您不打算只是情节的摘要,但至少有一些基础数据的一样,所以它使用设置绘图区域基础数据框。

但是,我在ggplot2列表上发现了this线程,表明在即将发布的0.9.0版本中,此行为可能会发生变化。 (线程有点含糊,但我认为它意味着在下一个版本中,如果您添加的只有层的形式为stat_summary那么绘图限制将根据摘要计算,而不是原始数据。尽管是错误的。)