2017-03-09 4 views
0

私の理解では、ggplotのstatメソッドは値の配列をとり、特定の美学によって表示できる新しい値を計算します。ポイントのサイズは、各グループ内の数値変数の合計に比例するようにしたいと思います(ユニークx, yの組み合わせ)。 1つのグループに複数の値があるときはいつでも、1つのポイントの代わりに複数のポイントがプロットされていることに驚きました。ggplot stat_sumをサイズの美しさにマッピングするには?

ex_data <- data.frame(
    a = sort(rep(letters[1:4], 5)), 
    b = rep(letters[6:7], 10), 
    c = rnorm(20, 1000, 500), 
    d = rep(c('h', 'h', 'i', 'i'), 5) 
) 

p <- ggplot(ex_data, 
    aes(x = b, y = a, size = log10(c), color = d, shape = d)) + 
    geom_point(stat = 'sum', alpha = 0.33) + 
    scale_radius(guide = guide_legend(title = 'c (log)')) + 
    scale_color_manual(values = c('cyan', 'magenta'), 
        guide = guide_legend(title = 'd'), 
        labels = c('h', 'i')) + 
    scale_shape_manual(values = c(15, 18), guide = FALSE) + 
    theme_bw() 

print(p) 

おかげで、同じ色のc-fa-f複数の点で、例えば互いの上にプロットされていることが表示されている低アルファする:ここで、最小の実施例です。どのように私は各位置で各色の1つのポイントを持つことができ、これらのマークのサイズは、そのグループ内の変数log10(c)のすべての値の合計を表しますか?

+0

がどのように一点があることができますが、2つの色をマッピングしている場合その座標に?その点はどのような色が必要ですか?そしてどのような形ですか? – Axeman

+0

私は各色で1点を意味しますが、同じ場所で同じ色の2点を意味しません。 – deeenes

+1

一般に、 'stat'sumary'は' y'審美的に単純な要約関数に役立ちます。 'a' /' b'/dの組み合わせごとに 'c'の単一の値までデータセットを要約したいと思うようです。これは、要約データセットを使用して目的のプロットを作成するggplotの外部で行うのが最も簡単です。 – aosmith

答えて

0

です。ここにはdplyrの実例があります。 (注意:スタックオーバーフローのレビューは、それは私が新しい答えを書いています唯一の理由ですが、私はそれをMAK77の返信を編集し、受け入れることができませんでした。)

require(dplyr) 
require(ggplot2) 

ex_data <- data.frame(
    a = sort(rep(letters[1:4], 5)), 
    b = rep(letters[6:7], 10), 
    c = rnorm(20, 1000, 500), 
    d = rep(c('h', 'h', 'i', 'i'), 5) 
) 

ex_data_2 <- ex_data %>% 
     group_by(a, b, d) %>% 
     mutate(csum = sum(c)) %>% 
     summarise_all(first) 

p <- ggplot(ex_data_2, 
      aes(x = b, y = a, size = log(csum), color = d, shape = d)) + 
    geom_point(alpha = 0.33) + 
    scale_radius(guide = guide_legend(title = 'c (log)')) + 
    scale_color_manual(values = c('cyan', 'magenta'), 
        guide = guide_legend(title = 'd'), 
        labels = c('h', 'i')) + 
    scale_shape_manual(values = c(15, 18), guide = FALSE) + 
    theme_bw() 
p 
1

私はあなたが何らかの形でデータを再形成する必要があると信じています。ここに私の例では、stat='sum'が故に、我々はデータを集計し、ggplotに行く前に統計を適用する必要があり、唯一のy美学と一緒に働くことができているように見えます(data.tabledplyrで)

ex_data_2 <- data.table(ex_data) %>% 
    .[, list(c = sum(c), 
      d = which.max(table(d))), by = list(a, b)] %>% 
    .[, d := c('c', 'd')[d]] 
p <- ggplot(ex_data_2, 
      aes(x = b, y = a, size = log(c), color = d, shape = d)) + 
    geom_point(stat = 'sum', alpha = 0.33) + 
    scale_radius(guide = guide_legend(title = 'c (log)')) + 
    scale_color_manual(values = c('cyan', 'magenta'), 
         guide = guide_legend(title = 'd'), 
         labels = c('h', 'i')) + 
    scale_shape_manual(values = c(15, 18), guide = FALSE) + 
    theme_bw() 
p 
+0

'sort.list(y)のエラー: 'sort.list'の 'x'はアトミックでなければなりません リストに「並べ替え」と呼ばれましたか?答えは – Axeman

+0

ありがとう!私はコードを実行し、これは各点で 'd'の1つのレベルを落とすので、私はシアンかマゼンタのどちらかを持っています(' 'which_max(table(d) ''のためだと思います)。メインの美学に 'size 'を渡すのに十分な意味合いはないので、ggplotのこの利便性を悪用することはできません。 – deeenes

関連する問題