我正在尝试解决x轴标签重叠的问题,希望能实现自动换行。我知道这个问题已经被问了很多次,也有一些好的答案。然而,我没有看到任何一个解决方案可以在图形被调整大小时重新包装标签。
SO上的三个不同答案让我相信这是可行的。
当我们使用
SO上的三个不同答案让我相信这是可行的。
这个解决方案编写了一个定制的
geom
,用于将bar的标签size
适应于条形图的宽度,当您调整绘图大小时可以动态调整。这个解决方案依赖于一个名为
ggtext
的ggplot2
扩展包。该解决方案允许对绘图的title进行动态换行,当您调整绘图大小时,基于创建一个element_textbox()
实现。这个解决方案依赖于另一个名为
ggfittext
的扩展。它展示了如何动态调整标签内部的size
以适应条形图的尺寸,当您调整绘图大小时。本质上,它解决了与上述解决方案(1)相同的问题,但更加强大。事实上,这是让我感到有希望的特性,它依赖于一个通用解决方案geom_fit_text()
来适应矩形内的文本,而不仅仅是geom_bar()
。
一些演示数据以供使用
1. 仅为展示当 x 轴标签重叠时的典型输出而设置。
library(tidyverse)
my_mtcars <-
mtcars[15:20,] %>%
rownames_to_column("cars")
my_mtcars %>%
ggplot(aes(x = cars, y = mpg, fill = cars)) +
geom_bar(stat = "identity")
由reprex package(v0.3.0)于2021-01-29创建
当我们使用
ggfittext
时,可以看到标签在柱形内部缩小以适应柱形的大小。 library(tidyverse)
library(ggfittext)
#> Warning: package 'ggfittext' was built under R version 4.0.3
my_mtcars <-
mtcars[15:20,] %>%
rownames_to_column("cars")
my_mtcars %>%
ggplot(aes(x = cars, y = mpg, fill = cars)) +
geom_bar(stat = "identity") +
geom_bar_text(aes(label = cars),
color = "blue",
vjust = 1,
size = 7 * ggplot2::.pt,
min.size = 0,
padding.x = grid::unit(0, "pt"),
padding.y = grid::unit(0, "pt"))
#> Warning: Ignoring unknown aesthetics: label
这段内容是由reprex package (v0.3.0)于2021-01-29创建的。
3. ggfittext
具有reflow
参数,可以促进文本换行
library(tidyverse)
library(ggfittext)
#> Warning: package 'ggfittext' was built under R version 4.0.3
my_mtcars <-
mtcars[15:20,] %>%
rownames_to_column("cars")
my_mtcars %>%
ggplot(aes(x = cars, y = mpg, fill = cars)) +
geom_bar(stat = "identity") +
geom_bar_text(aes(label = cars),
color = "blue",
vjust = 1,
size = 7 * ggplot2::.pt,
min.size = 0,
padding.x = grid::unit(0, "pt"),
padding.y = grid::unit(0, "pt"),
reflow = TRUE ## <--------------- added this
)
#> Warning: Ignoring unknown aesthetics: label
这段内容是由reprex package (v0.3.0)在2021年01月29日创建的。
我的问题
我不知道如何做到这一点,但我们是否可以让ggfittext
为我们做一些艰苦的工作,动态地包装/调整/重新缩放x轴标签?在我看来,这种方式很天真,柱形图中的文本已经以正确的方式呈现,我们是否可以以某种方式“复制”这种呈现方式到轴标签中?