我想自动将标签包装在 ggplot2 中,即插入长标签的换行符。 Here 写了如何为其编写函数 (1),但遗憾的是我不知道将
labeller=label_wrap
放在我的代码 (2) 中。
(1) 哈德利函数
label_wrap <- function(variable, value) {
lapply(strwrap(as.character(value), width=25, simplify=FALSE),
paste, collapse="\n")
}
(2)代码示例
df = data.frame(x = c("label", "long label", "very, very long label"),
y = c(10, 15, 20))
ggplot(df, aes(x, y)) + geom_bar(stat="identity")
我想在这里包装一些较长的标签。
您不需要
label_wrap
功能。请改用 str_wrap
包中的 stringr
函数。
您没有提供
df
数据框,因此我创建了一个简单的数据框,其中包含您的标签。然后,将 str_wrap
函数应用于标签。
library(ggplot2)
library(stringr)
df = data.frame(x = c("label", "long label", "very, very long label"),
y = c(10, 15, 20))
df
df$newx = str_wrap(df$x, width = 10)
df
现在将标签应用到 ggplot 图表:第一个图表使用原始标签;第二个图表使用修改后的标签;对于第三个图表,标签在调用 ggplot 时被修改。
ggplot(df, aes(x, y)) +
xlab("") + ylab("Number of Participants") +
geom_bar(stat = "identity")
ggplot(df, aes(newx, y)) +
xlab("") + ylab("Number of Participants") +
geom_bar(stat = "identity")
ggplot(df, aes(x, y)) +
xlab("") + ylab("Number of Participants") +
geom_bar(stat = "identity") +
scale_x_discrete(labels = function(x) str_wrap(x, width = 10))
“scales”包包含一个非常类似于 Claude 和 Leonardo 的函数: 换行格式。
library(scales)
ggplot(df, aes(x, y)) + geom_bar(stat = "identity") +
labs(x = "", y = "Number of Participants") +
scale_x_discrete(labels = wrap_format(10))
这是另一种不参考库的方法
stringr
:
ggplot(df, aes(x, y)) +
xlab("") + ylab("Number of Participants") +
geom_bar(stat = "identity") +
scale_x_discrete(labels = function(x) lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n"))
打电话的地方:
lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n")
完成动态分割标签的工作。结果与第一个答案相同。
(希望)改进@Claude 的答案:
get_wraper <- function(width) {
function(x) {
lapply(strwrap(x, width = width, simplify = FALSE), paste, collapse="\n")
}
}
ggplot(df, aes(x, y)) + geom_bar(stat = "identity") +
labs(x = "", y = "Number of Participants") +
scale_x_discrete(labels = get_wraper(10))
为了更新这一点,
scales
包已为此目的接收了 label_wrap()
函数。现在更容易做到这一点。
library(ggplot2)
df = data.frame(x = c("label", "long label", "very, very long label"),
y = c(10, 15, 20))
ggplot(df, aes(x, y)) +
geom_bar(stat="identity") +
scale_x_discrete(labels = scales::label_wrap(10))
创建于 2024-09-23,使用 reprex v2.1.0