ggplot2 1.0 RCが公式アナウンスされました。 https://twitter.com/hadleywickham/status/459732274112520192
最近ggplot2の開発に関わる時間と気力がないので、せめてもの・・・、ということでggplot2 1.0の新機能です。
coord_quickmap()
computes and
sets the correct aspect ratio between one degree of latitude and one degree
of longitude at the centre of the plotted region. It does not perform full
fledged mapping projection as coord_map()
does and therefore is much
faster. Yet, it gives a correct approximation for small scale maps (a few
degrees in either direction) at medium to low latitudes (@jiho, #922).素早く地図を書くための座標系。
coord_map()
はプロジェクションを考慮するけど、coord_quickmap()
は近似でやる。
アスペクト比を上手く扱ってくれるので、狭い領域ならcoord_quickmap()
で十分。
以下の例は?coord_quickmap
より。
nz <- map_data("nz")
nzmap <- ggplot(nz, aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "white", colour = "black")
# デカルト座標系(アスペクト比を考慮しない)
nzmap
# メルカトル図法によるプロジェクション
nzmap + coord_map()
# アスペクト比の近似
nzmap + coord_quickmap()
ussr <- subset(map_data("world"), region=="USSR" & long > 0)
ussrmap <- ggplot(ussr , aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "white", colour = "black")
# メルカトル図法によるプロジェクション
ussrmap + coord_map()
# アスペクト比の近似
ussrmap + coord_quickmap()
geom_boxplot
gain new varwidth
argument for controlling whether or not
the width of boxplots should be proportional to the size of the groups
(@tsieger, #927).varwidth=TRUE
にすると箱ひげ図の幅がサンプルサイズの平方根に比例するようになる。
library(plyr)
set.seed(42)
d <- ldply(c(10, 100, 1000), function(x) data.frame(N=factor(x), V=rnorm(x)))
p <- ggplot(d, aes(N, V))
# 既定の動作
p + geom_boxplot()
# 幅による可視化
p + geom_boxplot(varwidth=TRUE)
## Warning: position_dodge requires constant width: output may be incorrect
position_jitterdodge()
combines position_jitter()
and position_dodge()
,
allowing the user to plot and align points generated by e.g. geom_point()
with those generated by a dodged geom_boxplot()
. See
example(position_jitterdodge)
for a potential usage. (@kevinushey, #932)解説不要。
d2 <- mutate(d, G = factor(rbinom(nrow(d), 1, 0.5), labels=letters[1:2]))
p <- ggplot(d2, aes(N, V, colour = G, fill = G))
# jitterもdodgeもなし
p + geom_point()
# jitter
p + geom_point(position = position_jitter(width = 0.2))
# dodge
p + geom_point(position = position_dodge(width = 0.5))
## ymax not defined: adjusting position using y instead
# jitter & dodge
p + geom_point(position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.5))
xlim()
or ylim()
(@jimhester, #557).昔から要望が多かった機能。
なお、xlim
とylim
はスケーリングでの段階での範囲指定なので、範囲外のデータは可視化だけではなく統計計算からも除外されます。
x <- rnorm(10000)
# 範囲指定なし
qplot(x, geom="histogram")
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
# 両側範囲指定
qplot(x, geom="histogram") + xlim(-1, 1)
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
# 片側範囲指定
qplot(x, geom="histogram") + xlim(-1, NA)
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
scale_fill/colour_distiller()
functions (@jiho, #925).color brewerのパレットを連続値の色で使えるようになった。
以下は?scale_fill_distiller
の例を改変。
volcano3d <- reshape2::melt(volcano)
names(volcano3d) <- c("x", "y", "z")
v <- ggplot() + geom_tile(aes(x = x, y = y, fill = z), data = volcano3d) + coord_equal()
# デフォルト
v
# scale_fill_distillerのデフォルト
v + scale_fill_distiller(guide = "colorbar")
# パレット(黄色オレンジ赤の3色グラデーション)
v + scale_fill_distiller(palette = "YlOrRd", guide = "colorbar")
stat_ellipse()
adds data ellipses. It supports bivariate normal and t distributions,
as well as a euclidian distance circle. (@jofrhwld, #926)見たまんま。計算方法等の詳細は?stat_ellipse
で。
p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour = Species)) + geom_point()
# 既定の動作(多変量t分布)
p + stat_ellipse()
# 多変量正規分布
p + stat_ellipse(type = "norm")
# 中心からのユークリッド距離
p + lapply(1:4/4, function(x) stat_ellipse(type = "euclid", level = x)) + coord_equal()
theme_linedraw()
is similar to theme_bw()
but with
truly only white and black elements and spacing between elements identical
to theme_gray
. theme_light
is similar but with light gray box and axes
around the plot, to emphasise content more (@jiho, #923)私は論文ではtheme_bw
してますが、theme_linedraw
の方がいいですね。
サンプルは?ggtheme
より。
p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg,
colour=factor(gear))) + facet_wrap(~am)
# theme_bw
p + theme_bw()
# theme_linedraw
p + theme_linedraw()
# theme_light
p + theme_light()
個人的には、見た目にはあんまりこだわらないほうがいいと思います。時間の無駄です。
library(grid)
p + theme(panel.margin.x = unit(2, "char"))
p + theme(panel.margin.x = unit(0, "null"))
vjust
parameter other than the default 0.5; the interpretation of vjust
and hjust
is now the same for both rotated and non-rotated text elements
(0 = top/left, 1 = bottom/right, 0.5 = centered). (@krlmlr, #883)マニアックですが、これ実装すると相当面倒なんです。 詳細はここで。
labeller()
for formatting faceting values.
(@stefanedwards, #910). Added label_wrap_gen
based on
https://github.com/hadley/ggplot2/wiki/labeller#writing-new-labellers
(@stefanedwards, #910)ファセットの行・列のタイトルのラベルを指定するための関数です。動作はややこしい。
引数で、ファセット用の変数名=ラベル用の関数
、みたいに指定します。
ラベル用の関数が1引数なら、ファセットの値を引数にしてその関数が呼び出されます。
ラベル用の関数が2引数なら、ファセットの変数名と値を引数にしてその関数が呼び出されます。
ラベル用の関数ではなく、ファセットの値に対応した名前付きベクトルにしてもOKで、この場合はその水準に対応する値になります(意味分かんないですね。例を見て下さい)。
quartzFonts(mei = quartzFont(rep("Meiryo", 4)))
p1 <- ggplot(subset(mpg, cyl %in% c(4, 6)), aes(cty, hwy)) + geom_point() + theme_grey(base_family="mei")
# デフォルト
p1 + facet_grid(cyl ~ class)
# cylに対してlabel_both(変数名:値)とする
p1 + facet_grid(cyl ~ class, labeller=labeller(cyl=label_both))
# cylに対して1引数の関数
f <- function(x) paste0(x, " 気筒")
p1 + facet_grid(cyl ~ class, labeller=labeller(cyl=f))
# 名前付きベクトルで指定
lbl <- c(`4` = "あいうえ", `6` = "おかき")
p1 + facet_grid(cyl ~ class, labeller=labeller(cyl=lbl))
あと、長い説明を入れたときに自動改行する補助関数もできてますね。 ただし日本語だと空白入れないと改行されないのであんまり意味無いですね。
quartzFonts(mei = quartzFont(rep("Meiryo", 4)))
d <- mutate(subset(mpg, cyl %in% c(4, 6)),
cyl2 = factor(cyl, levels = c(4, 6), labels = c("この道をいけば どうなるものか", "迷わず行けよ 行けばわかるさ")))
p1 <- ggplot(d, aes(cty, hwy)) + geom_point() + theme_grey(base_family="mei")
p1 + facet_grid(class~cyl2, labeller=labeller(cyl2 = label_wrap_gen(6)))
ggplot2 1.0 RCのインストールは
install.packages("devtools")
devtools::install_github("hadley/ggplot2@ggplot2-1.0.0-rc")
動作させた環境
sessionInfo()
## R version 3.0.2 (2013-09-25)
## Platform: x86_64-apple-darwin10.8.0 (64-bit)
##
## locale:
## [1] ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] plyr_1.8 pings_1.0 pingr_0.1 mapproj_1.2-2
## [5] maps_2.3-6 dplyr_0.1.1 devtools_1.4.1 ggplot2_1.0.0
## [9] knitr_1.5.22
##
## loaded via a namespace (and not attached):
## [1] assertthat_0.1 audio_0.1-5 codetools_0.2-8
## [4] colorspace_1.2-4 dichromat_2.0-0 digest_0.6.4
## [7] evaluate_0.5.1 formatR_0.10 grid_3.0.2
## [10] gtable_0.1.2 httr_0.2 labeling_0.2
## [13] MASS_7.3-29 memoise_0.1 munsell_0.4.2
## [16] parallel_3.0.2 proto_0.3-10 RColorBrewer_1.0-5
## [19] Rcpp_0.11.0 RCurl_1.95-4.1 reshape2_1.2.2
## [22] scales_0.2.3 stringr_0.6.2 tools_3.0.2
## [25] whisker_0.3-2