_ggplot2
_の折れ線グラフがあり、2本の線がかなり重なっています。 position_jitterdodge()
を使用して見やすくしようとしていますが、同じ方法で両方のジッターを指す線と点を取得できません。ポイントとラインを水平方向にのみジッターしようとしています(y軸の変更を提案したくないため)。これがMWEです。
_## Create data frames
dimension <- factor(c("A", "B", "C", "D"))
df <- data.frame("dimension" = rep(dimension, 2),
"value" = c(20, 21, 34, 32,
20, 21, 36, 29),
"Time" = c(rep("First", 4), rep("Second", 4)))
## Plot it
ggplot(data = df, aes(x = dimension, y = value,
shape = Time, linetype = Time, group = Time)) +
geom_line(position = position_jitterdodge(dodge.width = 0.45)) +
geom_point(position = position_jitterdodge(dodge.width = 0.45)) +
xlab("Dimension") + ylab("Value")
_
醜いものを生み出す:
私は明らかにここで根本的に何かが間違っています:_geom_point
_ジッターを_geom_line
_ジッターに従わせるにはどうすればよいですか?
1つの解決策は、ポイントを手動でジッターすることです。
df$value_j <- jitter(df$value)
ggplot(df, aes(dimension, value_j, shape=Time, linetype=Time, group=Time)) +
geom_line() +
geom_point() +
labs(x="Dimension", y="Value")
離散X軸の水平解はそれほどきれいではありません(それはきれいです カバーの下で ggplot2がそれを行うとき、それはあなたのために軸と点の変換を非常にうまく処理するので)、それは実行可能です:
df$dim_j <- jitter(as.numeric(factor(df$dimension)))
ggplot(df, aes(dim_j, value, shape=Time, linetype=Time, group=Time)) +
geom_line() +
geom_point() +
scale_x_continuous(labels=dimension) +
labs(x="Dimension", y="Value")
2017年7月、ggplot2
の開発者は、position_jitter
関数にseed
引数を追加しました( https://github.com/tidyverse/ggplot2/pull/1996 )。
したがって、(ここでは:ggplot2 3.2.1
)引数seed
をposition_jitter
に渡して、geom_point
とgeom_line
で同じjitter
効果を得ることができます(公式ドキュメントを参照してください: https: //ggplot2.tidyverse.org/reference/position_jitter.html )
このseed
引数は(まだ)geom_jitter
には存在しないことに注意してください。
ggplot(data = df, aes(x = dimension, y = value,
shape = Time, linetype = Time, group = Time)) +
geom_line(position = position_jitter(width = 0.25, seed = 123)) +
geom_point(position = position_jitter(width = 0.25, seed = 123)) +
xlab("Dimension") + ylab("Value")