是否可以为显示定义特定于刻面的Y轴范围 - GGPLOT2

时间:2012-02-12 17:28:50

标签: r ggplot2

facet_grid中, ggplot2 会自动定义将在Y轴上显示的值范围。如果使用scale = "free_y",则值的范围可能因方面而异。

或者,用户可以使用scale_y_continuous定义他/她自己将在Y轴上显示的值范围。但在这种情况下,所有方面的范围都是相同的。

我的问题是:用户是否有办法定义特定于分面的Y轴范围?

示例:假设facet变量取2个值(A和B),Y值介于0到10之间,A介于20和100之间。有没有办法指示 ggplot2 仅为A显示0到5之间的Y值,为B显示20到50之间的Y值?或者,更复杂的是,指示 ggplot2 显示A的所有Y值(默认值),但B只显示20到50之间的值?

使用晶格,可以使用预先面板定义面板特定的Y轴范围。我想知道这是否可以用 ggplot2

PS:我当然不想选择在运行绘图之前显示Y值,但仅限于显示时。

1 个答案:

答案 0 :(得分:2)

我不知道如何告诉 ggplot2 自行完成此操作,但仅仅通过对数据进行子集化来实现相同的效果并不是非常困难:

#Sample data matching your description
dat <- data.frame(x = runif(100),
                  y = c(runif(50,0,10),runif(50,20,100)),
                  grp = rep(LETTERS[1:2],each = 50))

#Plotting everything                      
ggplot(dat) + 
    facet_wrap(~grp,scales = "free_y") + 
    geom_point(aes(x = x,y = y))

#Plotting only 0-5 in grp A, 20-50 in grp B     
ggplot(subset(dat,(grp == 'A' & y <= 5) | (grp == 'B' & y >= 20 & y <= 50))) + 
    facet_wrap(~grp,scales = "free_y") + 
    geom_point(aes(x = x,y = y))