47

小さな倍数を使用してプロットしたいデータ系列が多数あります。ggplot2とfacet_wrap私が望むことを組み合わせて、通常は6x6ファセットの素敵な小さなブロックを作成します。より単純なバージョンは次のとおりです。

facet_wrap

問題は、ファセットストリップのラベルを適切に制御できないことです。データフレームの列の名前は短く、そのままにしておきたいのですが、ファセットのラベルをよりわかりやすくしたいと思います。facet_grid関数を利用できるように使用できますlabellerが、列の数を指定する簡単な方法がないようで、ファセットの長い行はこの特定のタスクでは機能しません。明らかな何かが欠けていますか?

facet_grid

Q.列名を変更せずにfacet_wrapを使用する場合、ファセットラベルを変更するにはどうすればよいですか?または、facet_gridを使用するときに列と行の数を指定するにはどうすればよいですか?

簡略化した例のコードは次のとおりです。実生活では、それぞれが頻繁に変更される数十のデータ系列を含む複数のグループを扱っているため、手動で値を割り当てるのではなく、ソリューションを自動化する必要があります。

require(ggplot2)
require(reshape)

# Random data with short column names
set.seed(123)
myrows <- 30
mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows),
                   aa = runif(myrows, min=1, max=2),
                   bb = runif(myrows, min=1, max=2),
                   cc = runif(myrows, min=1, max=2),
                   dd = runif(myrows, min=1, max=2),
                   ee = runif(myrows, min=1, max=2),
                   ff = runif(myrows, min=1, max=2))

# Plot using facet wrap - we want to specify the columns
# and the rows and this works just fine, we have a little block
# of 2 columns and 3 rows

mydf <- melt(mydf, id = c('date'))

p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) +
    geom_line() +
    facet_wrap( ~ variable, ncol = 2)
print (p1)

# Problem: we want more descriptive labels without changing column names.
# We can change the labels, but doing so requires us to
# switch from facet_wrap to facet_grid
# However, in facet_grid we can't specify the columns and rows...

mf_labeller <- function(var, value){ # lifted bodily from the R Cookbook
    value <- as.character(value)
    if (var=="variable") {
        value[value=="aa"]   <- "A long label"
        value[value=="bb"]   <- "B Partners"
        value[value=="cc"]   <- "CC Inc."
        value[value=="dd"]   <- "DD Company"
        value[value=="ee"]   <- "Eeeeeek!"
        value[value=="ff"]   <- "Final"
    }
    return(value)
}

p2 <- ggplot(mydf, aes(y = value, x = date, group = variable)) +
    geom_line() +
    facet_grid( ~ variable, labeller = mf_labeller)
print (p2)
4

4 に答える 4

25

よくわかりません。短いラベルを長い説明的なラベルに変換する関数はすでに作成されています。facet_wrap単に新しい列を追加し、代わりにその列で使用することの何が問題になっていますか?

mydf <- melt(mydf, id = c('date'))
mydf$variableLab <- mf_labeller('variable',mydf$variable)

p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) +
    geom_line() +
    facet_wrap( ~ variableLab, ncol = 2)
print (p1)
于 2012-04-14T07:23:33.433 に答える
8

ラベル名を変更するには、で使用する因子の因子レベルを変更するだけですfacet_wrap。これらはfacet_wrapストリップで使用されます。labellerの関数を使用する場合と同様の設定を使用できますfacet_grid。次のようなことをしてください。

new_labels = sapply(levels(df$factor_variable), custom_labeller_function)
df$factor_variable = factor(df$factor_variable, levels = new_labels)

factor_variableこれで、で使用できますfacet_wrap

于 2012-04-14T07:23:52.747 に答える
0

引数に追加labeller = label_wrap_gen(width = 25, multi_line = TRUE)するだけです。facet_wrap()

例えば。:... + facet_wrap( ~ variable, ,labeller = label_wrap_gen(width = 25, multi_line = TRUE))

より詳しい情報:?ggplot2::label_wrap_gen

于 2018-09-12T12:32:31.360 に答える
0

labeller = label_bothをfacet_wrap()引数に追加するだけです。

... + facet_wrap( ~ variable, labeller = label_both)
于 2020-09-28T11:57:16.567 に答える