ggplot2でバイオリンプロットを分割する

user102162:

seabornドキュメンテーションのこのページの 4番目の例のように、ggplotを使用して分割バイオリン密度プロットを作成したいと思います。

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

ここにいくつかのデータがあります:

set.seed(20160229)

my_data = data.frame(
    y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5)),
    x=c(rep('a', 2000), rep('b', 2000)),
    m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000))
)

私は次のように回避されたバイオリンをプロットできます:

library('ggplot2')

ggplot(my_data, aes(x, y, fill=m)) +
  geom_violin()

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

しかし、横並び分布のさまざまなポイントで幅を視覚的に比較することは困難です。ggplotでスプリットバイオリンの例を見つけることができませんでした-可能ですか?

基本のRグラフィックスソリューションを見つけましたが、関数が非常に長く、分布モードを強調表示したいと思います。これは、ggplotに追加のレイヤーとして簡単に追加できますが、その関数の編集方法を理解する必要がある場合は、実行が難しくなります。

jan-glx:

または、密度をいじるのを避けるために、ggplot2のGeomViolinを次のように拡張できます

GeomSplitViolin <- ggproto("GeomSplitViolin", GeomViolin, 
                           draw_group = function(self, data, ..., draw_quantiles = NULL) {
  data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x))
  grp <- data[1, "group"]
  newdata <- plyr::arrange(transform(data, x = if (grp %% 2 == 1) xminv else xmaxv), if (grp %% 2 == 1) y else -y)
  newdata <- rbind(newdata[1, ], newdata, newdata[nrow(newdata), ], newdata[1, ])
  newdata[c(1, nrow(newdata) - 1, nrow(newdata)), "x"] <- round(newdata[1, "x"])

  if (length(draw_quantiles) > 0 & !scales::zero_range(range(data$y))) {
    stopifnot(all(draw_quantiles >= 0), all(draw_quantiles <=
      1))
    quantiles <- ggplot2:::create_quantile_segment_frame(data, draw_quantiles)
    aesthetics <- data[rep(1, nrow(quantiles)), setdiff(names(data), c("x", "y")), drop = FALSE]
    aesthetics$alpha <- rep(1, nrow(quantiles))
    both <- cbind(quantiles, aesthetics)
    quantile_grob <- GeomPath$draw_panel(both, ...)
    ggplot2:::ggname("geom_split_violin", grid::grobTree(GeomPolygon$draw_panel(newdata, ...), quantile_grob))
  }
  else {
    ggplot2:::ggname("geom_split_violin", GeomPolygon$draw_panel(newdata, ...))
  }
})

geom_split_violin <- function(mapping = NULL, data = NULL, stat = "ydensity", position = "identity", ..., 
                              draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE, 
                              show.legend = NA, inherit.aes = TRUE) {
  layer(data = data, mapping = mapping, stat = stat, geom = GeomSplitViolin, 
        position = position, show.legend = show.legend, inherit.aes = inherit.aes, 
        params = list(trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ...))
}

そして、geom_split_violinこのように新しいものを使用してください

ggplot(my_data, aes(x, y, fill = m)) + geom_split_violin()

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ggplot2でバイオリンプロットを分割する

分類Dev

Rでggplot2を使用して2つのプロットをオーバーレイする

分類Dev

折れ線グラフを密度プロットでオーバーレイする方法は?(R、ggplot2)

分類Dev

ggplot2(R)で分割バイオリン図を使用してラベルの重複を回避する方法

分類Dev

ggplot2で2つのエラーバーとポイントグラフをプロットする

分類Dev

ggplot2:ネストされたスプリットバイオリンのブロックを表示

分類Dev

Rスプリットバイオリン図ggplot2

分類Dev

ggplot2で複数の線+リボンプロットを描画する

分類Dev

ggplot2で追加の単一値ポイントを使用してバイオリン図を作成する方法

分類Dev

ggplot2でnlmeオブジェクトをプロットする

分類Dev

ggplot2の異なるバーに同じエントリをプロットします

分類Dev

ggplot2でスパゲッティプロット(グループ化変数あり)とスプリットバイオリン(なし)を組み合わせる

分類Dev

異なる長さのベクトルのggplot2でバイオリン図を作成しますか?

分類Dev

黒のアウトラインでプロットするggplot2

分類Dev

ggplot2でシェープファイルをプロットする

分類Dev

ggplot2でシェープファイルをプロットする

分類Dev

異なるggplot2プロットでコマンドを複製する

分類Dev

x軸テキストをggplot2のバープロットバーに近づける(背景パネルをオーバーレイする)

分類Dev

ggplot2で関数ファミリーをプロットする方法

分類Dev

ggplot2で範囲(コリドー)プロットを作成する

分類Dev

ggplot2で範囲(コリドー)プロットを作成する

分類Dev

ggplot2:2つのプロットをオーバーレイし、両方の凡例を使用します

分類Dev

ggplot2:カテゴリ軸とオーバーレイポイントでポイントをかわす

分類Dev

ggplot2で累積レイヤープロットを作成する方法

分類Dev

ggplot2で複数のレイヤーをプロットする

分類Dev

tcltkウィンドウでggplot2とggmapをプロットする

分類Dev

ggplot2で日中(日付なし)をプロットする

分類Dev

ggplot2で円グラフをプロットする

分類Dev

ggplot2で季節の時系列をプロットする

Related 関連記事

  1. 1

    ggplot2でバイオリンプロットを分割する

  2. 2

    Rでggplot2を使用して2つのプロットをオーバーレイする

  3. 3

    折れ線グラフを密度プロットでオーバーレイする方法は?(R、ggplot2)

  4. 4

    ggplot2(R)で分割バイオリン図を使用してラベルの重複を回避する方法

  5. 5

    ggplot2で2つのエラーバーとポイントグラフをプロットする

  6. 6

    ggplot2:ネストされたスプリットバイオリンのブロックを表示

  7. 7

    Rスプリットバイオリン図ggplot2

  8. 8

    ggplot2で複数の線+リボンプロットを描画する

  9. 9

    ggplot2で追加の単一値ポイントを使用してバイオリン図を作成する方法

  10. 10

    ggplot2でnlmeオブジェクトをプロットする

  11. 11

    ggplot2の異なるバーに同じエントリをプロットします

  12. 12

    ggplot2でスパゲッティプロット(グループ化変数あり)とスプリットバイオリン(なし)を組み合わせる

  13. 13

    異なる長さのベクトルのggplot2でバイオリン図を作成しますか?

  14. 14

    黒のアウトラインでプロットするggplot2

  15. 15

    ggplot2でシェープファイルをプロットする

  16. 16

    ggplot2でシェープファイルをプロットする

  17. 17

    異なるggplot2プロットでコマンドを複製する

  18. 18

    x軸テキストをggplot2のバープロットバーに近づける(背景パネルをオーバーレイする)

  19. 19

    ggplot2で関数ファミリーをプロットする方法

  20. 20

    ggplot2で範囲(コリドー)プロットを作成する

  21. 21

    ggplot2で範囲(コリドー)プロットを作成する

  22. 22

    ggplot2:2つのプロットをオーバーレイし、両方の凡例を使用します

  23. 23

    ggplot2:カテゴリ軸とオーバーレイポイントでポイントをかわす

  24. 24

    ggplot2で累積レイヤープロットを作成する方法

  25. 25

    ggplot2で複数のレイヤーをプロットする

  26. 26

    tcltkウィンドウでggplot2とggmapをプロットする

  27. 27

    ggplot2で日中(日付なし)をプロットする

  28. 28

    ggplot2で円グラフをプロットする

  29. 29

    ggplot2で季節の時系列をプロットする

ホットタグ

アーカイブ