3

ポイントが重なっているRのデータがあります。

x = c(4,4,4,7,3,7,3,8,6,8,9,1,1,1,8)
y = c(5,5,5,2,1,2,5,2,2,2,3,5,5,5,2)
plot(x,y)

オーバーラップしているポイントがそうでないポイントよりも比例して大きくなるように、これらのポイントをプロットするにはどうすればよいですか。たとえば、3 つの点が (4,5) にある場合、位置 (4,5) の点は、点が 1 つしかない点の 3 倍の大きさになります。

4

8 に答える 8

9

を使用する 1 つの方法を次に示しggplot2ます。

x = c(4,4,4,7,3,7,3,8,6,8,9,1,1,1,8)
y = c(5,5,5,2,1,2,5,2,2,2,3,5,5,5,2)
df <- data.frame(x = x,y = y)
ggplot(data = df,aes(x = x,y = y)) + stat_sum()

ここに画像の説明を入力

デフォルトでstat_sumは、インスタンスの割合が使用されます。次のようにして、代わりに raw カウントを使用できます。

ggplot(data = df,aes(x = x,y = y)) + stat_sum(aes(size = ..n..))
于 2013-02-04T19:14:17.680 に答える
6

これがより単純な(私が思う)解決策です:

x <- c(4,4,4,7,3,7,3,8,6,8,9,1,1,1,8)
y <- c(5,5,5,2,1,2,5,2,2,2,3,5,5,5,2)
size <- sapply(1:length(x), function(i) { sum(x==x[i] & y==y[i]) })
plot(x,y, cex=size)
于 2013-02-04T19:18:57.960 に答える
5
## Tabulate the number of occurrences of each cooordinate
df <- data.frame(x, y)
df2 <- cbind(unique(df), value = with(df, tapply(x, paste(x,y), length)))

## Use cex to set point size to some function of coordinate count
## (By using sqrt(value), the _area_ of each point will be proportional
##  to the number of observations it represents)
plot(y ~ x, cex = sqrt(value), data = df2, pch = 16)

ここに画像の説明を入力

于 2013-02-04T19:14:17.227 に答える
4

あなたは実際にはこのアプローチを求めていませんでしたが、アルファはこれに対処する別の方法かもしれません:

library(ggplot2)
ggplot(data.frame(x=x, y=y), aes(x, y)) + geom_point(alpha=.3, size = 3)

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

于 2013-02-04T19:18:40.947 に答える
3

cexパラメータをプロット関数に追加する必要があります。まず、関数as.data.frameを使用しtableて、データを一意の (x,y) ペアとその頻度に減らします。

new.data = as.data.frame(table(x,y))
new.data = new.data[new.data$Freq != 0,] # Remove points with zero frequency

これの唯一の欠点は、数値データを因数に変換することです。数値に戻してプロットしてください。

plot(as.numeric(new.data$x), as.numeric(new.data$y), cex = as.numeric(new.data$Freq))
于 2013-02-04T19:19:45.107 に答える
2

試してみることもできますsunflowerplot

sunflowerplot(x,y)

ここに画像の説明を入力

于 2018-07-15T10:30:02.780 に答える
1

ポイントのサイズを調整するための代替案を提案させてください。サイズ (半径? 面積?) を使用することの欠点の 1 つは、読者によるスポット サイズと基礎となる数値の評価が主観的であることです。

したがって、オプション 1: 各ポイントを透明度でプロットします --- タイラーによる忍者です! オプション 2:jitterプロットされたポイントがオーバーラップしないように、データをわずかにプッシュするために使用します。

于 2013-02-04T19:20:21.567 に答える
0

latticeandを使用したソリューションtable( @R_User に似ていますが、格子が仕事をするので 0 を削除する必要はありません)

   dt <-  as.data.frame(table(x,y))
   xyplot(dt$y~dt$x, cex = dt$Freq^2, col =dt$Freq)

ここに画像の説明を入力

于 2013-02-04T23:47:39.833 に答える