亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用ggplot2分割小提琴圖

用ggplot2分割小提琴圖

鳳凰求蠱 2019-10-17 16:17:26
我想使用ggplot創建分割的小提琴密度圖,就像seaborn文檔的此頁上的第四個示例一樣。這是一些數據: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中將其添加為其他層,但是如果我需要弄清楚如何編輯該功能,則將很難進行。
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

注意:我認為jan-glx的答案要好得多,大多數人應該改用它。


您可以通過自己先計算密度,然后繪制多邊形來實現。大致請見下文。


獲取密度

library(dplyr)

pdat <- my_data %>%

  group_by(x, m) %>%

  do(data.frame(loc = density(.$y)$x,

                dens = density(.$y)$y))

組的翻轉和偏移密度

pdat$dens <- ifelse(pdat$m == 'i', pdat$dens * -1, pdat$dens)

pdat$dens <- ifelse(pdat$x == 'b', pdat$dens + 1, pdat$dens)

情節

ggplot(pdat, aes(dens, loc, fill = m, group = interaction(m, x))) + 

  geom_polygon() +

  scale_x_continuous(breaks = 0:1, labels = c('a', 'b')) +

  ylab('density') +

  theme_minimal() +

  theme(axis.title.x = element_blank())

結果

http://img1.sycdn.imooc.com//5da823dc0001623606170369.jpg

查看完整回答
反對 回復 2019-10-17
  • 2 回答
  • 0 關注
  • 3374 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號