web-dev-qa-db-ja.com

ggplotのコントロールポイントの境界線の太さ

Ggplotを使用する場合、shapeを21-25に設定して、内部色(fill)と境界線(col)に独立した設定を持つ図形を取得できます。

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

enter image description here

ただし、シェイプの境界線の太さを制御する方法はわかりません。絶対に設定するか、美的マッピングとして設定するかです。 lwdの値を設定すると、sizeの外観が上書きされることに注意してください。

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)

enter image description here

ボーダーの太さを制御するにはどうすればよいですか?

63
Noam Ross

ggplot2のバージョン2.0.0以降では、ポイントの境界線の太さを制御する引数があります。から NEWS.mdファイル:

geom_point()は、図形21-25(#1133、@ SeySayux)の境界線の幅を制御するストロークの美しさを獲得します。サイズとストロークは加算されるため、サイズ= 5およびストローク= 5のポイントの直径は10mmになります。 (#1142)

したがって、これに対する正しい解決策は次のとおりです。

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)

Output

70
Noam Ross

少しハック感がありますが、サイズの美的マッピングに設定されたドットの「background」セットに加えて、拡大ドットの境界に小さな定数を追加できます。定数を使用して、目的の境界線の幅を取得します。

また、グラフに凡例を表示するのを停止するには、サイズの凡例を無効にする必要があります...

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+
  scale_size( guide = "none" )+
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

enter image description here

14
Simon O'Hanlon

別の解決策は、Rでプロットを作成し、それを.svgファイルにエクスポートすることです。その後、ベクターグラフィックス編集ソフトウェア(Inkscapeなど)を使用して、線幅を変更できます。この方法は、データポイントが重複する場合に特に役立ちます。

2
Gopal Penny