facet_wrap和缩放点大小

时间:2012-11-27 23:04:25

标签: r ggplot2 facet-wrap

简而言之: 我想为使用facet_wrap制作的双面板情节的每个“面板”分别设置图例。当我需要不同的轴刻度时,使用facet_wrap(scales="free")可以正常工作,但不适用于点的大小。

背景 我有几个样本的数据,每个样本有三个测量值: x y z 。每个样本来自1类或2类。 x y 在每个类中具有相同的分布。但是,类1的所有 z 测量值都小于1.0;第2类的 z 测量值范围为0到100。

我被困的地方 分别在x和y轴上绘制 x y 。使每个点的面积与其 z 值成比例。

d = matrix(c(runif(100),runif(20)*100),ncol=3)
e = data.frame( gl(2,20), d )
colnames(e) = c("class","x","y","z")
ggplot( data = e, aes(x=x, y=y, size=z) ) + 
  geom_point() + scale_area() +
  facet_wrap( ~ class, ncol=1, scales="free" )

enter image description here

问题: 请注意,第一个面板上的点很难看到,因为它们位于用于单个图例的刻度的最低端,范围从0到100.甚至可以有两个单独的图例(每个图例都有不同的范围)或者我应该制作两个图并将它们与视口组合?

1 个答案:

答案 0 :(得分:5)

使用grid.arrange的解决方案。我已拨打facet_wrap的电话,因此strip.text仍然存在。你可以轻松删除它。

# plot for class 1
c1 <- ggplot(e[e$class==1,], aes(x=x,y=y,size=z)) + geom_point() + scale_area() + facet_wrap(~class)
# plot for class 2
c2 <- c1 %+% e[e$class==2,]

library(gridExtra)

grid.arrange(c1,c2, ncol=1)

enter image description here