簡體   English   中英

有沒有辦法使用 ggplot2 在箱線圖上輸入 beta 分布?

[英]Is there a way to input a beta distribution on a boxplot using ggplot2?

我正在嘗試創建一個框 plot ,其中我的 y 軸是從 csv 數據表創建的 beta 分布,而我的 x 軸是來自同一數據表的列。 該表稱為“beta”,這是它的 dput:

structure(list(weld.type.ID = 1:33, weld.type = structure(c(29L, 
11L, 16L, 4L, 28L, 17L, 19L, 5L, 24L, 27L, 21L, 32L, 12L, 20L, 
26L, 25L, 3L, 7L, 13L, 22L, 33L, 1L, 9L, 10L, 18L, 15L, 31L, 
8L, 23L, 2L, 14L, 6L, 30L), .Label = c("1,40,Material A", "1,40S,Material C", 
"1,80,Material A", "1,STD,Material A", "1,XS,Material A", "10,10S,Material C", 
"10,160,Material A", "10,40,Material A", "10,40S,Material C", 
"10,80,Material A", "10,STD,Material A", "10,XS,Material A", 
"13,40,Material A", "13,40S,Material C", "13,80,Material A", 
"13,STD,Material A", "13,XS,Material A", "14,40,Material A", 
"14,STD,Material A", "14,XS,Material A", "15,STD,Material A", 
"15,XS,Material A", "2,10S,Material C", "2,160,Material A", "2,40,Material A", 
"2,40S,Material C", "2,80,Material A", "2,STD,Material A", "2,XS,Material A", 
"4,80,Material A", "4,STD,Material A", "6,STD,Material A", "6,XS,Material A"
), class = "factor"), a = c(281L, 196L, 59L, 96L, 442L, 98L, 
66L, 30L, 68L, 43L, 35L, 44L, 23L, 14L, 24L, 38L, 8L, 8L, 5L, 
19L, 37L, 38L, 6L, 11L, 29L, 6L, 16L, 6L, 16L, 3L, 4L, 9L, 12L
), b = c(7194L, 4298L, 3457L, 2982L, 4280L, 3605L, 2229L, 1744L, 
2234L, 1012L, 1096L, 1023L, 1461L, 1303L, 531L, 233L, 630L, 502L, 
328L, 509L, 629L, 554L, 358L, 501L, 422L, 566L, 403L, 211L, 159L, 
268L, 167L, 140L, 621L)), row.names = c(NA, -33L), class = "data.frame")

我嘗試的第一個代碼是:

SampleValuesBox <- rbeta(10000,beta$a,beta$b)
SampleValuesBoxPlot <- data.frame(yvalue = SampleValuesBox)

my_boxplot <- ggplot(beta, aes(x = weld.type.ID, y = yvalue)) + 
  geom_boxplot()+
  labs(x="Weld Type ID", y="repair rate")

print(my_boxplot)

我收到了這個錯誤

FUN(X[[i]], ...) 中的錯誤:未找到 object 'yvalue'

我嘗試的第二個代碼是:

SampleValuesBox <- rbeta(10000,beta$a,beta$b)
ggplot(data.frame(vals=SampleValuesBox))+
  geom_boxplot(aes(x = beta$weld.type.ID, y = vals))+
  labs(x="Weld Type ID", y="repair rate")

我收到了這個錯誤

錯誤:美學長度必須為 1 或與數據(10000)相同:x

我嘗試的第三個代碼:

my_boxplot <- ggplot(beta, aes(x = weld.type.ID, y = SampleValuesBox)) + 
  geom_boxplot() + 
  labs(x="Weld Type ID", y="repair rate")

我收到了這個錯誤

錯誤:美學長度必須為 1 或與數據 (33) 相同:y

預期的結果是 plot,如下所示:

預期結果

我似乎找不到將 beta 分布與我的“beta”數據表中的列組合到同一個框 plot 的方法。 任何幫助,將不勝感激!

如果您將所有需要的數據字段放入一個數據框中,並將其傳遞給ggplot() ,那么生活(就 ggplot2 而言)會更容易。 看看以下是否適合您:

# specify number of desired yvalues for each weld.type.ID
n <- 100 

# generate yvalues from beta distribution for each weld.type.ID
SampleValuesBox <- lapply(seq(1, nrow(beta)),
                          function(i) rbeta(n, beta$a[i], beta$b[i]))

# combine generated yvalues with their associated weld.type.ID values
SampleValuesBoxPlot <- data.frame(weld.type.ID = rep(beta$weld.type.ID, each = n),
                                  yvalue = unlist(SampleValuesBox))

ggplot(SampleValuesBoxPlot, 
       aes(x = factor(weld.type.ID), y = yvalue)) + 
  geom_boxplot()+
  labs(x="Weld Type ID", y="repair rate")

陰謀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM