我正在尝试实现一种包装 x 轴标签的解决方案,这样它们就不会重叠。我知道这个问题已经被问过好几次了,并且有一些很好的答案。但是,我没有看到任何解决方案可以回答如何在情节调整大小时重新包装标签。
SO 的三个不同答案让我相信这是可以实现的。
该解决方案编写了一个定制的工具,
geom
用于在调整绘图大小时动态地调整 bar的标签以适应 bar 的宽度。size
此解决方案依赖于被调用的扩展包。该解决方案允许在根据创建.
ggplot2
ggtext
element_textbox()
此解决方案依赖于另一个名为
ggfittext
. 它显示了size
当您调整绘图大小时,条形内的标签如何动态变化以适应条形的尺寸。本质上,它解决了与上述解决方案 (1) 相同的问题,但功能更强大。事实上,这是让我充满希望的特性,它依赖于一个通用的解决方案geom_fit_text()
来适应矩形内的文本,而不仅仅是geom_bar()
s。
一些可使用的演示数据
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 包于 2021-01-29 创建(v0.3.0)
2.当我们使用时,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 包于 2021-01-29 创建(v0.3.0)
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 包于 2021-01-29 创建(v0.3.0)
我的问题
我不知道该怎么做,但是我们可以通过某种方式让ggfittext
我们为我们做艰苦的工作,来动态地包装/调整大小/重新调整 x 轴标签吗?在我看到的天真的方式中,条形图中的文本已经以正确的方式呈现,我们可以以某种方式将这个呈现“复制”到轴标签吗?