3

简而言之: 我想为使用facet_wrap. 当我想要不同的轴比例时,使用facet_wrap(scales="free")效果很好,但不适用于点的大小。

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

我被困在哪里:分别在 x 和 y 轴上 绘制xy 。使每个点的面积与其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" )

在此处输入图像描述

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

4

1 回答 1

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)

在此处输入图像描述

于 2012-11-27T23:19:53.857 回答