我正在尝试使用R(3.1.1)中的ggplot2包(1.0.1)和scales="free"在分面图中设置分类轴上的标签。如果我不手动设置轴刻度标签,则它们会正确显示(第一个图),但是当我尝试设置标签时(第二个图),只有前n个标签在两个分面上都被使用(与原始标签不同)。以下是说明问题的可重复代码片段:
我注意到我无法在数据框中正确设置标签,因为它们不是唯一的。我知道可以用arrange.grid实现此目的,但如果标签长度不同,则需要手动对齐图表。此外,我希望在图表中包含facet标签,这不是arrange.grid解决方案的可用选项。另外,我还没有尝试使用视口。也许那是解决方案,但我希望这个图表看起来更像faceted图,并且似乎更类似于grid.arrange。
对我来说,这似乎是一个错误,但我愿意接受如何将其作为“特性”的解释。同时,我也希望能有一个简单的解决方案,我可能还没有想到!
foo <- data.frame(yVal=factor(letters[1:8]), xVal=factor(rep(1:4,2)), fillVal=rnorm(8), facetVar=rep(1:2,each=4))
## axis labels are correct
p <- ggplot(foo) + geom_tile(aes(x=xVal, y=yVal, fill=fillVal)) + facet_grid(facetVar ~ ., scales='free')
print(p)
## axis labels are not set correctly
p <- p + scale_y_discrete(labels=c('a','a','b','b','c','d','d','d'))
print(p)
我注意到我无法在数据框中正确设置标签,因为它们不是唯一的。我知道可以用arrange.grid实现此目的,但如果标签长度不同,则需要手动对齐图表。此外,我希望在图表中包含facet标签,这不是arrange.grid解决方案的可用选项。另外,我还没有尝试使用视口。也许那是解决方案,但我希望这个图表看起来更像faceted图,并且似乎更类似于grid.arrange。
对我来说,这似乎是一个错误,但我愿意接受如何将其作为“特性”的解释。同时,我也希望能有一个简单的解决方案,我可能还没有想到!
grid.arrange
将单独的绘图组合起来,仍然可以获得面板条形标签。即使您的分面变量只有一个类别,facet_grid
和facet_wrap
仍然可以工作。这并不是说grid.arrange
解决方案没有其他困难需要克服(正如您所指出的),但我想指出的是,即使是单个绘图,您也可以使用标准的ggplot
代码获得面板标签。 - eipi10geom_text
添加它们。这个答案展示了一般的思路,尽管在你的情况下,我可以看到跳过stat_summary
并直接在每个瓷砖上使用白色文本。 - aosmith