2つのポイント間に矢印を入れたいggplot
チャートを作成しています。メインタスクはgeom_line(arrow = arrow())
で簡単に行えます。ただし、「美しい」太い矢印がいくつか必要です。 size=
を使用して矢印のサイズを変更しても、矢印の頭が完全に台無しになるため、役に立ちません。私の問題を説明します:
サンプルデータとプロットを作成します。
NAME <- c("A", "A", "B", "B", "C", "C")
YEAR <- c(2016, 2011, 2016, 2011, 2016, 2011)
YEAR <- as.factor(YEAR)
VALUE <- c(1, 4, 1, 5, 2, 8)
DATA <- data.frame(NAME, YEAR, VALUE)
ggplot(DATA, aes(x=VALUE, y=NAME)) +
geom_point(size=5, aes(colour=YEAR)) +
geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"))
結果のプロットは次のようになります。
今、私は矢印を「太く」しようとしました...
ggplot(DATA, aes(x=VALUE, y=NAME)) +
geom_point(size=5, aes(colour=YEAR)) +
geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"), size = 3)
これが、次の結果です。
私の質問:「美しい」太い矢印をプロットする方法はありますか?
通常、geom_segment
を使用して矢印を作成します。ただし、そのためには、データを「long」形式から「wide」形式に変更する必要があります(通常、reshape2
またはdata.table
パッケージのdcast
を使用します)。しかし、今回はbase
のreshape
関数を使用してみました。
ggplot(DATA, aes(x=VALUE, y=NAME)) +
geom_point(size=5, aes(colour=YEAR)) +
geom_segment(data = reshape(DATA, v.names="VALUE", idvar = "NAME", timevar = "YEAR", direction = "wide"),
aes(x=VALUE.2011, xend=VALUE.2016, y=NAME, yend=NAME), size = 2,
arrow = arrow(length = unit(0.5, "cm")))
[〜#〜] edit [〜#〜]:「閉じた」タイプの矢印にも同じ問題が関係していることがわかりました。今のところ、プロットをベクトルグラフ(pdfまたはsvg、ggsave
または[プロット]タブの[エクスポート]メニューを使用)として保存してみてください。結果は「乱雑」ではありません。
ggplot2
の最新バージョン(およびこの回答を書いている時点でdevtools::install_github("tidyverse/ggplot2")
の最新版-すぐにメインラインになると確信しています)には、geom_segment
にlinejoin
引数があります。 linejoin='mitre'
を使用すると、鮮明なエッジが得られます。 詳細は以下 を参照してください。
これには非常に単純ですが、いくぶん「ハッキングな」解決策があります。
アイデアは、最初に線を描くことです(望ましい太さで、矢じりはありません)が、少し短くします(場合によっては計算できます)。次に、矢印でサイズを変更せずに2本目の線を描画します。結果のオーバーレイは、希望どおりに見えます。