[英]R: Plot ecdf of one column on an axis of another column with ggplot
我確信這可以通過單獨收集所有數據然后僅使用 ggplot 進行繪圖來完成,但我真的更喜歡實現 ggplot 的更簡單的解決方案,特別是 stat_ecdf() 因為更容易訪問分組變量、方面等.
我的 dataframe 除其他外包含兩列相應的數據 x 和 y。 我想 plot y 的 ecdf 在相應 x 值的軸上。 換句話說,我想 plot 在其對應的 x 值處達到 y 變量的累積部分。 雖然 x 和 y 是相關的(都是降序的),但它們沒有解析連接,所以我不能簡單地將 y 的值縮放到 x。 我嘗試通過單獨計算每個子集的 ecdf 函數來做到這一點變得非常混亂和復雜,而 stat_ecdf function 似乎非常接近我需要的東西。
如果我將 ggplot aes 中的 x 變量設置為 x,然后將 stat_ecdf 中的變量設置為 y,我可以得到軸標簽為 x 的 y 的 ecdf; 但是,軸上的實際值對應於 x。 我正在密謀這是通過以下方式完成的:
ggplot(df, aes(x, color=group_var)) + stat_ecdf(aes(y))
編輯:可視化:此示例 plot顯示了多個組的 x 的 ecdf。 每個 x 值在排序后的 dataframe 中都有一個對應的 y 值(近似關系,忽略末尾的遞減區域。我想有一個類似的 plot ,其中水平軸在相應的 y 值中。基本上,我需要 Z45178DC8ED4FE214第一個 ecdf plot 從 x-> y 的水平軸盡可能簡單。我可以通過在 dataframe 中添加 ecdf 值作為列來手動執行此操作,但如果可能的話,我希望在 ggplot 中執行此操作。
與其試圖讓stat_ecdf
去做一些它不是為它設計的事情,不如在代碼中明確說明你的意圖。
這很簡單。 最奇怪的一段代碼: ecdf(y)(y)
menas '計算y
的經驗 CDF,然后根據我的數據中y
的實際值對其進行評估。 cummax
處理遞減的y
,以使 eCDF 沿着x
不斷增加。
d_sample %>%
group_by(group) %>%
arrange(group, x) %>%
mutate(
fraction = ecdf(y)(y),
maxf = pmax(fraction, cummax(fraction))) %>%
ggplot(aes(x, maxf)) +
geom_point() +
facet_wrap(~group)
我仍然不確定這是否是您需要的。
老實說,我花了大部分時間來“偽造”你的數據集:
library(tidyverse)
tibble(x = seq_len(300) + 100) %>%
mutate(
one = - 1e-3 * (x * x) + 50 + 0.7 * x,
two = - 1e-3 * (x * x) + 55 + 0.68 * x,
three = - 1e-3 * (x * x) + 110 + 0.5 * x,
four = - 1e-3 * (x * x) + 10 + 0.8 * x) %>%
pivot_longer(-x, names_to = "group", values_to = "y") %>%
filter(
group == "one"
| group == "two"
| (group == "three" & x < 200)
| (group == "four" & x > 250)) ->
d_sample
d_sample %>%
ggplot(aes(x, y, colour = group)) +
geom_point()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.