我想生成一個小提琴圖,其中不同的區域用不同的顏色填充。舉個例子:
df <- data.frame("data" = runif(1000))
ggplot(df, aes(x ="DATA", y = data)) geom_violin(aes(fill = if_else(data > 0.5, "green","red")))
上面的命令生成如下圖所示的小提琴圖。小提琴情節由 2 個分開的部分組成。我期待一個完整的形狀(即沒有物理分離),其中上部(資料> 0.5)為綠色,下部為紅色。
我知道有一個著色問題。但是,我想問的是:
- 為什么情節分為兩部分?
- 有沒有辦法讓它成為一個單一的“身體”,就像在普通的小提琴情節中一樣?
我發現以下解決方案有一個多色小提琴圖,但在我的情況下不起作用:
uj5u.com熱心網友回復:
鏈接的答案顯示了一種通過構建繪圖和調整底層 grobs 的巧妙方法,但如果你想在沒有 grob-hacking 的情況下做到這一點,你將需要獲得自己的密度曲線并用多邊形繪制它們:
df <- data.frame("data" = runif(1000))
dens <- density(df$data)
new_df1 <- data.frame(y = c(dens$x[dens$x < 0.5], rev(dens$x[dens$x < 0.5])),
x = c(-dens$y[dens$x < 0.5], rev(dens$y[dens$x < 0.5])),
z = 'red2')
new_df2 <- data.frame(y = c(dens$x[dens$x >= 0.5], rev(dens$x[dens$x >= 0.5])),
x = c(-dens$y[dens$x >= 0.5], rev(dens$y[dens$x >= 0.5])),
z = 'green3')
ggplot(rbind(new_df1, new_df2), aes(x, y, fill = z))
geom_polygon()
scale_fill_identity()
scale_x_continuous(breaks = 0, expand = c(1, 1), labels = 'DATA', name = '')

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454409.html
