我正在尝试实现一种包装 x 轴标签的解决方案,以便它们不会重叠。我知道这个问题已经被问过好几次了,并且有一些好的答案。但是,我见过的解决方案都没有回答如何随着情节的发展重新包装标签resized.
SO 的三个不同答案让我相信这是可以实现的。
-
这个解决方案写了一份定制的geom
用于安装bar的标签size
当您调整绘图大小时,动态地适应条形的宽度。
-
这个解决方案依赖于一个扩大包用于ggplot2
called ggtext。该解决方案允许对情节进行动态换行title,当您调整绘图大小时,基于创建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")
Created on 2021-01-29 by the reprex package (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
Created on 2021-01-29 by the reprex package (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
Created on 2021-01-29 by the reprex package (v0.3.0)
我的问题
我不知道该怎么做,但是我们可以通过某种方式让 x 轴标签动态包装/调整大小/重新缩放吗ggfittext
为我们做艰苦的工作吗?在我看来,条形内的文本已经以正确的方式呈现,我们可以以某种方式将此渲染“复制”到轴标签吗?