ラベルをggplot2で自動的にラップしたいと思います。 ここ は、そのための関数の書き方(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
関数は必要ありません。代わりに、stringr
パッケージのstr_wrap
関数を使用してください。
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チャートに適用します。最初のチャートは元のラベルを使用します。 2番目のグラフは変更されたラベルを使用します。 3番目のチャートでは、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」パッケージには、クロードやレオナルドによく似た関数wrap_formatが含まれています。
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")
ラベルを動的に分割する作業を行います。結果は最初の answer と同じです。
(願わくば)@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))