小さな倍数を使用してプロットしたいデータ系列が多数あります。ggplot2とfacet_wrap
私が望むことを組み合わせて、通常は6x6ファセットの素敵な小さなブロックを作成します。より単純なバージョンは次のとおりです。
問題は、ファセットストリップのラベルを適切に制御できないことです。データフレームの列の名前は短く、そのままにしておきたいのですが、ファセットのラベルをよりわかりやすくしたいと思います。facet_grid
関数を利用できるように使用できますlabeller
が、列の数を指定する簡単な方法がないようで、ファセットの長い行はこの特定のタスクでは機能しません。明らかな何かが欠けていますか?
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)