2012-05-03 12 views
33

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) 

the plot I want, except it doesn't have borders around the points

、私は黒のボーダーの凡例エントリを持っていないしたいと思います。私の最高の試みは、次のとおりです。

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) 

与える:

not at all the plot I want

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

アウトラインを取得してマッピングを正しく行うことができれば、最後の数字セットhereのようなハックを使用して凡例をオフにすることができます。

答えて

60

それは少しあいまいですが、あなたは(私は午後9時25は、関連する形だと思います)> 20 pchを使用する必要があります。内部COLO(U)を制御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、それがどのようになるまでさかのぼる知らない)で、デフォルトのガイドがcolourbarです。 g0 + guides(fill="legend")が必要な場合は、ここに示すプロットのように点を含む凡例を取得します。デフォルトの休憩も、変更されました:正確複製あなたがg0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))を必要とし、このプロットに...

enter image description here

関連が同一ではない:how to create a plot with customized points in R?。受け入れられた答えは、@ジョランの回答に示されているレイヤー技術を使用しますが、pch=21技術を使用する@jbaumsによる回答が(IMO)優れています。 (私はshape=21が代替である、そしておそらくpch=21に、好適だと思います。)あなたには、いくつかの値に応じて、絶対ではなく、それを設定したい場合は、colour外マッピング(aesビット)を置く必要があります

PS変数...

+0

あなたはそうです、このテクニックはより良いです。 – joran

+0

ベンに感謝します。この方法を使用してストローク(アウトライン)の幅を変更する方法はありますか? – geotheory

+0

私は1つも見ません(私は 'width'と' lwd'を設定しようとしました)、申し訳ありません。 –

21

最初の質問はギミです:

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

そして、ああ、あなたは余分な伝説を望んでいん。私はその後、それをしないと思う:

enter image description here

+0

興味深いことにガイドは、第二geom_pointのために表示されない - それは、なぜ私は本当に理解していないが、それは私がとにかく欲しかったものですので、私はそれを心配ます別の日 –

+0

ああ、なぜそれがaes()コールの中にないので、私は理由を見る –

+0

@DrewSteen - あなたがそれを持っているように見える、私はそれを理解するために私にもしばらくかかったので、私は/何がggplot 0.9の導入によって時代遅れになるのかわからない:http://stackoverflow.com/questions/4221168/ggplot-legend-issue-w-geom-point-and-geom-text – Chase

4

私は同じ問題を抱えていましたが、私はジッタも許容する解決策が必要でした。このためには、枠線付きの塗りつぶしの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)) 
関連する問題