5

を使用しても機能しないため、プロットされるポイントの順序を制御したい高密度の散布図があります。alpha基本的に、「上に」プロットしたい少数のポイントがあります。このggplot2のポイントの「zオーダー」を制御する唯一の方法は、レイヤーを使用することです。私は次のものを持っています:

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
df$g <- c("1")
df[500,]$g <- c("special")
df[600,]$g <- c("special2")
ggplot(df) + geom_point(aes(x=x, y=y, colour=g))

これにより、列の値の適切な凡例が表示されgます。ここで、値が「special」、「special2」のポイントがたまたま残りのポイントの上にプロットされますが、多くの場合、これは正しくありません。その場合、データフレームをレイヤーに分割して、各レイヤーを 1 つずつプロットしようとしましたポイントの順序を確実に取得するための1つ:

df1 <- df[df$g == "special",]
df2 <- df[df$g == "special2",]
df3 <- df[df$g == "1",]
# plot layer by layer
p <- ggplot() + geom_point(aes_string(x=x,y=y), data=df1, color="red")
p <- p + geom_point(aes_string(x=x, y=y), data=df2, color="green")
p <- p + geom_point(aes_string(x=x, y=y), data=df3, color="blue")

これは機能しますが、 df が だけでプロットされる最初のケースとは異なり、凡例は表示されませんcolour=g。凡例を表示するにはどうすればよいですか?

また、これを行う簡単な方法はありますか?元の呼び出しは、レイヤーの問題を除いて完璧です. たとえば、ggplotに順序を伝える方法はありませんか

ggplot(df) + geom_point(aes(x=x, y=y, colour=g), order=c("1", "special", "special2"))

最初にvalueを持つすべてのポイントをプロットし、次にgvalueを持つすべてのポイントなどをプロットする必要があることを示すために、データフレームを別々のものに分割し、レイヤーを使用してから凡例を手動で指定することは、プロットされるポイントの順序を制御するためだけに非常に面倒です. 簡単な最初の呼び出しで、ggplot は色も処理してくれます。これは非常に便利です。ありがとう。1gspecial

psこれらのプロットを作成するためにrpy2を使用していますが、変換は(通常)rpy2に簡単なのでRを示しましたが、rpy2ソリューションはさらに優れています。

4

1 に答える 1

6

の順序geom_pointは、データの順序によって決まります。つまり、データ フレームの下部にあるデータ ポイントが最後にプロットされます。

これは簡単な解決策を示しています。プロットする前にデータ フレームを並べ替えます。

df <- df[order(df$g), ]
df$size <- df$g != 1
ggplot(df) + geom_point(aes(x=x, y=y, colour=g, size=size))

ここに画像の説明を入力

ただし、多くの場合、質問で提案したように、異なるレイヤーを使用する方が簡単です。この場合でも、aes引数を使用してカラー スケールを指定できます。

ggplot() + 
  geom_point(data=df[df$g==1, ], aes(x=x, y=y, colour=g), size=1) +
  geom_point(data=df[df$g!=1, ], aes(x=x, y=y, colour=g), size=5)

ここに画像の説明を入力

于 2013-06-02T06:29:54.580 に答える