使用刻度设置分类轴标签" free" GGPLOT2

时间:2015-06-16 19:06:37

标签: r plot ggplot2 facet

我正在尝试使用R(3.1.1)中的ggplot2包(1.0.1)在刻面图中的分类轴上设置标签,其中scale =" free"。如果我在没有手动设置轴刻度标签的情况下绘图它们会正确显示(第一个绘图),但是当我尝试设置标签(第二个绘图)时,只有前两个刻面上使用了前n个标签(不像原始标签那样顺序)

这是一个可重现的代码片段,用于说明问题:

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)

我注意到我无法在data.frame中正确设置标签,因为它们不是唯一的。另外我知道我可以用arrange.grid完成这个,但这需要&#34;手动&#34;如果有不同长度的标签等,则对齐绘图。此外,我希望绘图中包含的facet标签不是arrange.grid解决方案的可用选项。我还没有尝试过视口。也许这就是解决方案,但我希望这个情节有更多的分面外观,而且看起来更像是grid.arrange。

在我看来好像这是一个错误,但我愿意解释这可能是一个&#34;功能&#34;。我也希望这个问题可能有一个简单的解决方案,我还没想过!

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用正确的转换在数据集中创建另一个列。这也更容易审核和操作。如果您坚持手动更改:

你不能简单地直接设置标签,因为它会回收(我认为)每个方面的标签向量。相反,您需要使用相应的中断和标签设置转化:

p <- p + scale_y_discrete(labels = c('1','2','3','4','5','6','7','8'), breaks=c('a','b','c','d','e','f','g','h'))
print(p)

a的任何y轴值现在将替换为1b替换为2,依此类推。您可以使用标签值来查看我的意思。只需确保您拥有的每个因子值也在break参数中表示。

答案 1 :(得分:0)

我想我实际上可以解决这个问题。我的问题是我的标签不正确,因为正如上面有人说的那样 - 似乎标签向量是通过回收的。这行代码给了我不正确的标签。

ggplot(dat, aes(x, y))+geom_col()+facet_grid(d ~ t, switch = "y", scales = "free_x")+ylab(NULL)+ylim(0,10)+geom_text(aes(label = x))

但是,当geom_text移到facet_grid之前,以下代码为我提供了正确的标签。

ggplot(dat, aes(x, y))+geom_col()+geom_text(aes(label = x))+facet_grid(d ~ t, switch = "y", scales = "free_x")+ylab(NULL)+ylim(0,10)

我很可能误解了上面的问题,但我当然解决了我的问题所以希望这对某人有帮助!