1

2 種類のカブトムシを観察したとしましょう。以下のように geom_violin() を使用してサイズを比較します。

df = data.frame(species=rep(c('species_a','species_b'),3), size=c(1,1.5,1.2,1.8,1.1,1.9))
ggplot(df, aes(x=species, y=size)) + geom_violin()

予想されるサイズ範囲は、species_a では [0.8,1.8]、species_b では [1.2, 1.8] であることがわかります...

ranges = list(species_a=c(0.8,1.8), species_b=c(1.2,1.8))

この範囲 (たとえば灰色の形状) をグラフに簡単に追加するにはどうすればよいでしょうか?

4

2 に答える 2

4

種名と最小値/最大値を使用して範囲を別のデータ フレームに入れる

ranges = data.frame(species=c('species_a','species_b'), 
                    rmin=c(0.8,1.2),rmax=c(1.2,1.8))
ranges

    species rmin rmax
1 species_a  0.8  1.8
2 species_b  1.2  1.8

次に、新しいデータ フレームを使用geom_rect()して、 の下に配置される領域を作成しgeom_violin()ます。はgeom_blank()、元のデータ フレームに従って x 軸を作成するために使用されます。

ggplot(df, aes(x=species, y=size))  + geom_blank() + 
  geom_rect(data=ranges,aes(xmin=as.numeric(species)-0.45,
                            xmax=as.numeric(species)+0.45,
                            ymin=rmin,ymax=rmax),inherit.aes=FALSE)+
  geom_violin()

ここに画像の説明を入力

于 2013-11-13T16:33:07.623 に答える
0

これを試すことができます:

# first, create data frame from list 'ranges'
df2 <- setNames(object = do.call(rbind.data.frame, ranges), nm = c("min_size", "max_size"))
df2$species <- rownames(df2)

# plot violins with 'df', and ranges with 'df2'.
# Set colour and size according to your own "data-ink ratio" preferences.
ggplot(data = df, aes(x = species)) +
  geom_violin(aes(y = size)) +
  geom_linerange(data = df2, aes(ymax = max_size, ymin = min_size), colour = "grey", size = 3)

ここに画像の説明を入力

于 2013-11-13T16:41:37.997 に答える