设置带有刻度 "free" ggplot2 的分类轴标签
Set categorical axis labels with scales "free" ggplot2
我正在尝试使用 R (3.1.1) 中的 ggplot2 包 (1.0.1) 将标签设置在分面图中的分类轴上,比例 ="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 来完成这个,但是如果有不同的长度标签等,这需要 "manually" 对齐图。此外,我希望在图中包含小平面标签不是 arrange.grid 解决方案的可用选项。我还没有尝试过视口。也许这就是解决方案,但我希望这个情节有更多的多面性,这似乎更类似于 grid.arrange。
在我看来,这似乎是一个错误,但我愿意接受关于这可能是一个 "feature" 的解释。我也希望能有一个我还没有想到的简单的解决方法!
最简单的方法是使用正确的转换在数据集中创建另一列。这也将更容易审计和操作。如果您坚持手动更改:
您不能简单地直接设置标签,因为它会回收(我认为)每个方面的标签向量。相反,您需要使用相应的中断和标签设置转换:
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 轴值现在将替换为 1
,b
替换为 2
等等。您可以尝试使用标签值来了解我的意思。只需确保您拥有的每个因子值也在 breaks 参数中表示。
我想我可能真的有办法解决这个问题。我的问题是我的标签不正确,因为正如上面有人所说 - 标签向量似乎被回收了。这行代码给了我错误的标签。
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)
很有可能我误解了上面的问题,但我确实解决了我的问题所以希望这对某人有帮助!
我正在尝试使用 R (3.1.1) 中的 ggplot2 包 (1.0.1) 将标签设置在分面图中的分类轴上,比例 ="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 来完成这个,但是如果有不同的长度标签等,这需要 "manually" 对齐图。此外,我希望在图中包含小平面标签不是 arrange.grid 解决方案的可用选项。我还没有尝试过视口。也许这就是解决方案,但我希望这个情节有更多的多面性,这似乎更类似于 grid.arrange。
在我看来,这似乎是一个错误,但我愿意接受关于这可能是一个 "feature" 的解释。我也希望能有一个我还没有想到的简单的解决方法!
最简单的方法是使用正确的转换在数据集中创建另一列。这也将更容易审计和操作。如果您坚持手动更改:
您不能简单地直接设置标签,因为它会回收(我认为)每个方面的标签向量。相反,您需要使用相应的中断和标签设置转换:
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 轴值现在将替换为 1
,b
替换为 2
等等。您可以尝试使用标签值来了解我的意思。只需确保您拥有的每个因子值也在 breaks 参数中表示。
我想我可能真的有办法解决这个问题。我的问题是我的标签不正确,因为正如上面有人所说 - 标签向量似乎被回收了。这行代码给了我错误的标签。
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)
很有可能我误解了上面的问题,但我确实解决了我的问题所以希望这对某人有帮助!