64

ggplot2を使用して、データに基づいて塗りつぶされた散布図上のポイントの周りに黒い境界線を配置したいと思います。また、黒い境界線は各ポイントにあるため、凡例のエントリは避けたいと思います。基本的に私はこのプロットを探していますが、各ポイントの周りに黒い境界線があります。

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

ポイントの周りに境界線がないことを除いて、私が望むプロット

ボーナスとして、私は黒い境界線の凡例エントリを持たないようにしたいと思います。私の最善の試みは:

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

これは次のようになります。

私が望むプロットはまったくありません

なぜそれが私が望むものを与えないのか理解できません、そしてさらに悪いことに(ggplot2での私の教育のために)それが塗りつぶしの色を何にもマッピングしないように見える理由がわかりません!何か助けはありますか?

おそらく、アウトラインと塗りつぶしのマッピングを正しく行うことができれば、ここにある最後の図のセットのようなハックを使用して、凡例をオフにすることができます。

4

5 に答える 5

111

少しわかりにくいですが、pch> 20を使用する必要があります(21:25が適切な形状だと思います):fill内部のカラーリングをcolour制御し、エッジの周りの線を制御します。

(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id), 
       colour="black",pch=21, size=5))

更新:最近のggplot2バージョン(たとえば、2.0.0、それがどこまでさかのぼるかわからない)では、デフォルトのガイドはカラーバーです。g0 + guides(fill="legend")ここに示すプロットのように、ポイントのある凡例を取得する必要があります。デフォルトのブレークも変更されました。このプロットを正確に複製するには、必要なg0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))...

ここに画像の説明を入力してください

関連しているが同一ではない:Rでカスタマイズされた点を使用してプロットを作成する方法は?。その質問に対する受け入れられた答えは、@ joranの答えに示されている階層化手法を使用していますが、(IMO)このpch=21手法を使用する@jbaumsによる回答の方が優れています。(私shape=21は、これに代わるものであり、おそらく好ましいと思いますpch=21。)

PS変数の値に従わずに絶対に設定したい場合は、マッピング(ビット)のcolour 外側に配置する必要があります...aes

于 2012-05-03T18:49:21.020 に答える
31

最初の質問はちょっとしたものです:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(colour=id), size=12) + 
    geom_point(shape = 1,size = 12,colour = "black")

そして、ああ、あなたは余分な伝説を望んでいません。私はそれがそれであると思います:

ここに画像の説明を入力してください

于 2012-05-03T18:47:06.367 に答える
6

同じ問題がありましたが、ジッターも許容するソリューションが必要でした。このためには、境界線のある塗りつぶされた形状であるpchと、gridExtraパッケージのgrid.edit関数を使用する必要があります。あなたの例を使用して:

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

library(gridExtra)
grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = 3))
于 2015-02-19T00:34:29.277 に答える
4

同じ質問がありましたが、緯度と経度でgeom_mapを使用していたため、2020年1月現在の他の回答は機能しませんでした。

質問を言い換えると、以下はポイントの周りに黒い輪郭がありません:

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

色と美学の両方を宣言してから形状21を使用すると、問題は解決しました。

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

黒で囲まれたポイント

于 2020-01-07T17:43:26.347 に答える
0

より詳細な制御が必要な場合(たとえば、さまざまな形状や透明度を持つポイントの境界線)、fill形状のある美学を使用します21:25

ggplot(aes(x = Sepal.Length, y = Petal.Width, fill = Species, shape = Species), data = iris) + # notice: fill
    geom_point(size = 4, alpha = 0.5) + # transparent point
    geom_point(size = 4, fill = NA, colour = "black") + # black border
    scale_shape_manual(values = c(21:23)) + # enable fill aesthetic
    theme_classic()
于 2020-10-27T14:13:30.997 に答える