2009-10-07 155 views
8

我已经用ggplo2创建了一个很好的facet_wrap密度图。我希望每个面板都有x和y轴标签,而不是只有沿着左侧的y轴标签和沿着底部的x标签。我现在所拥有的是这样的:使用ggplot2和facet_wrap显示多轴标签R

library(ggplot2) 
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups) 
p 

将返回:

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png

看起来这应该是简单的,但我的谷歌赋一直穷得找到答案。

回答

8

简答:你不能那样做。这可能对3个图有意义,但如果你有一个32格的大格子呢?这看起来很嘈杂和不好。 GGplot的哲学是关于以最少的定制做正确的事情,这意味着自然不能像其他软件包那样定制事物。

长答案:你可以通过构建三个独立的ggplot对象并将它们组合来伪造它。但这不是一个通用的解决方案。下面是Hadley书中的一些代码,假设你已经创建了ggplot对象a,b和c。它排在第一排,b和c在最下面一排。

grid.newpage() 
pushViewport(viewport(layout=grid.layout(2,2))) 
vplayout<-function(x,y) 
    viewport(layout.pos.row=x,layout.pos.col=y) 
print(a,vp=vplayout(1,1:2)) 
print(b,vp=vplayout(2,1)) 
print(c,vp=vplayout(2,2)) 
+0

是啊,我居然也得到了“你不应该这样做”的氛围,从ggplot。我将尝试实施你给出的例子。这似乎是合理的。 – 2009-10-07 16:41:36

+2

如果您需要出版质量的图像,您可以尝试的另一件事是使用ggsave()将图形保存为PDF或SVG(如果您不在Windows上)格式,然后使用类似Inkscape 。您可以轻松地将底部图像向下移动并将轴向上复制... – Harlan 2009-10-07 16:59:24

10

您可以通过秤=“免费”在您的facet_wrap看涨期权做到这一点:

myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups, scales="free") 
p