68

各ポイントが異なる色でラベル付けされる可能性のあるggplot2で密な散布図をプロットしています:

df <- data.frame(x=rnorm(500))
df$y = rnorm(500)*0.1 + df$x
df$label <- c("a")
df$label[50] <- "point"
df$size <- 2

ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size))

これを行うと、「点」(緑) というラベルの付いた散布点が、「a」というラベルの付いた赤い点の上にプロットされます。ggplot でこの z 順序を制御するもの、つまり、どの点がどの点の上にあるかを制御するものは何ですか?

たとえば、すべての "a" ポイントを "point" というラベルの付いたすべてのポイントの上に配置したい場合はどうすればよいでしょうか (つまり、そのポイントが部分的または完全に隠れてしまうことがあります)。これは、ラベルの英数字の順序に依存しますか?

簡単にrpy2に変換できる解決策を見つけたいです。

4

4 に答える 4

59

2016 アップデート:

順序の美学は廃止されたため、この時点で最も簡単な方法は、data.frame を並べ替えて、緑色の点が一番下になり、最後にプロットされるようにすることです。元の data.frame を変更したくない場合は、ggplot 呼び出し中に並べ替えることができます。これは、dplyr パッケージを使用%>%arrangeてオンザフライで並べ替えを行う例です。

library(dplyr)
ggplot(df %>%
         arrange(label),
       aes(x = x, y = y, color = label, size = size)) +
  geom_point()

ここに画像の説明を入力

ggplot2 バージョン < 2.0.0 に対する元の 2015 年の回答

ggplot2 では、順序美学を使用して、点がプロットされる順序を指定できます。最後にプロットされたものが一番上に表示されます。これを適用するには、ポイントを描画する順序を保持する変数を作成できます。

緑のドットを他のドットの後にプロットして上に配置するには:

df$order <- ifelse(df$label=="a", 1, 2)
ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size, order=order))

または、最初に緑色の点をプロットして埋めるには、点を逆の順序でプロットします。

ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size, order=-order))

この単純な例では、新しい並べ替え変数の作成をスキップして、label変数を係数に強制し、次に数値に強制することができます。

ggplot(df) +
  geom_point(aes(x=x, y=y, color=label, size=size, order=as.numeric(factor(df$label))))
于 2015-03-29T03:36:46.067 に答える
10

data.frame の行順にプロットされます。これを試して:

df2 <- rbind(df[-50,],df[50,])
ggplot(df2) + geom_point(aes(x=x, y=y, color=label, size=size))

ご覧のとおり、緑色の点は data.frame の最後の行を表すため、最後に描画されます。

以下は、緑色の点が最初に描画されるように data.frame を注文する方法です。

df2 <- df[order(-as.numeric(factor(df$label))),]
于 2013-03-29T15:38:25.563 に答える