我正在用 {ggdist} 制作一個互補的累積分布函式條形圖。當我將繪圖匯出為 svg(或其他矢量表示)時,我注意到從多邊形中突出了一條寬度為零的條紋(見附圖)。我寧愿沒有這個突出的條紋。
library(ggplot2)
library(ggdist)
df <- data.frame(
x = rep(c("A", "B"), each = 10),
y = c(rnorm(20, mean = rep(c(5, 7), each = 10)))
)
p <- ggplot(df, aes(x, y))
stat_ccdfinterval(geom = "slab")
lims(y = c(0, NA))
ggsave("test.svg", plot = p, device = svglite::svglite)
上面的代碼在下面生成了一個 svg 檔案,其中我用條紋突出顯示了多邊形的輪廓。

我想擺脫那個零寬度的條紋。我嘗試NA在這些點上設定相關的美學,但這也洗掉了不屬于條紋的角落之一。
ggplot(df, aes(x, y))
stat_ccdfinterval(
geom = "slab",
aes(thickness = after_stat(ifelse(f == 0, NA, f)))
)
lims(y = c(0, NA))

由reprex 包于 2022-03-10 創建(v2.0.1)
uj5u.com熱心網友回復:
我找到了一個針對這個問題的解決方案,但是如果方向是水平的或者使用 cdf 而不是 ccdf,它可能會產生不同的結果。簡而言之,我們仍然將 0-thickness 資料點設定為NA,但我們現在只在y美學超過分組最大值的情況下這樣做。
library(ggplot2)
library(ggdist)
df <- data.frame(
x = rep(c("A", "B"), each = 10),
y = c(rnorm(20, mean = rep(c(5, 7), each = 10)))
)
helper <- function(f, y, group) {
split(f, group) <- Map(
function(value, y) {
f <- value
max_y <- max(y[f != 0])
f[f == 0 & y > max_y] <- NA
f
},
value = split(f, group),
y = split(y, group)
)
f
}
ggplot(df, aes(x, y))
stat_ccdfinterval(
geom = "slab",
aes(thickness = after_stat(helper(f, y, group)))
)
lims(y = c(0, NA))

Created on 2022-03-13 by the reprex package (v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443272.html
上一篇:如何使用堆疊條制作多面條形圖?
