Re: [問題] 特製Boxplot盒鬚圖

看板R_Language作者 (討厭有好心推文後刪文者)時間9年前 (2015/03/05 20:56), 9年前編輯推噓4(4011)
留言15則, 2人參與, 最新討論串2/2 (看更多)
首先,boxplot() 其實會回傳一個物件,我叫 z 物件好了。 這個 z 物件本身是一個 list,裡頭就是 boxplot 的各種資訊。 像是 z$stat 就是各變數的 quantiles,z$name 是各變數的名稱。 你可以觀察看看 bx.p <- boxplot(split(rt(100, 4), gl(5, 20))) 的 bx.p 實際上是回傳了什麼給你。 這個 z 物件可以自己建,就像建一個 list 一樣。 然後再以 bxp(z物件) 畫出一個 boxplot。 請看以下按你的需求設計的例子。 # 二組虛假資料 a <- c(1:100) b <- c(50:1000) # 建立 z 物件(本身是一個 list) bxpObj <- list() # 一定要有 bxpObj$stats 這項,裡頭是一個 matrix, # 其中欄是變數,列是各 quantile,要有5列。 # 各 quantile 分別會被畫成下底線、下盒線、中位線、上盒線和上底線。 bxpObj$stats <- rbind( cbind( quantile(a, c(0.1, 0.25, 0.5, 0.75, 0.9)), quantile(b, c(0.1, 0.25, 0.5, 0.75, 0.9)) ) ) # bxpObj$name 這項就是變數名稱 bxpObj$name <- c("a", "b") # 重點來了:用 bxp() 畫 bxp(bxpObj) # 直接用 points() 補畫你要求的 20% 和 80% quantile。 points(1, quantile(a, 0.2), pch=1) # a的20% quantile points(1, quantile(a, 0.8), pch=2) # a的80% quantile points(2, quantile(b, 0.2), pch=3) # b的20% quantile points(2, quantile(b, 0.8), pch=4) # b的80% quantile 最後,如果你想自行改寫成一個新的 function,也要視你的資料而定。 例如是 myboxplot(變數,組別) 還是 myboxplot(matrix) 的寫法會不太一樣。 但重點就是我前面寫的:建一個 z 物件再餵 bxp() 吃下去就對了。 ※ 引述《ming790925 (MING)》之銘言: : [問題類型]: : 程式諮詢 : [軟體熟悉度]: : 使用者(已經有用R 做過不少作品) : [問題敘述]: : 我想畫一個 boxplot 但不要內建那種, : 因為我在意的是某幾格特定的百分位數, : 還有我不希望畫出outliers : 因為找了滿久的 都沒有找到能達到這樣的套件 : 想請問各位是否有印象有什麼套件已經能完成? : 舉例來說: : 除了中間的盒子外,我想要延伸出去到90% 10% quantile的值 : 並在80% 20%也加上標記 : 感激!!!!! : [關鍵字]: : boxplot quntile -- http://apansharing.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.68.143 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1425560179.A.B7C.html ※ 編輯: andrew43 (125.230.68.143), 03/05/2015 21:00:12 ※ 編輯: andrew43 (125.230.68.143), 03/05/2015 21:03:57 ※ 編輯: andrew43 (125.230.68.143), 03/05/2015 21:04:51

03/05 22:18, , 1F
請問如果在80%畫跟盒寬一樣長的線,只能用segments嗎?
03/05 22:18, 1F

03/05 22:35, , 2F
寬度是可以算的。
03/05 22:35, 2F

03/05 22:36, , 3F
請看看 ?bxp 裡的 pars 參數裡 *wex 這幾項。
03/05 22:36, 3F

03/05 22:36, , 4F
但怎麼直接取得這個寬度,我就不知道了。
03/05 22:36, 4F

03/05 22:41, , 5F
例如 bxp(..., pars=list(boxwex = 1)) 可使盒子靠緊。
03/05 22:41, 5F

03/05 22:43, , 6F
此時,上例中,橫軸的0.5--1.5就是寬度之範圍。
03/05 22:43, 6F

03/05 22:44, , 7F
boxwex預設是0.8,所以你應該能夠算得預設的寬度範圍。
03/05 22:44, 7F

03/05 22:50, , 8F
感恩!
03/05 22:50, 8F

03/08 15:35, , 9F
我又有一個小問題
03/08 15:35, 9F

03/08 15:36, , 10F
如果現在組data去畫,ex: boxplot(a,b)
03/08 15:36, 10F

03/08 15:36, , 11F
他 a的x軸會在1 b的軸位子會在2. 如果我想改變這
03/08 15:36, 11F

03/08 15:37, , 12F
不知道有沒有參數能改,我try了一陣子好想都沒找到...
03/08 15:37, 12F

03/08 15:38, , 13F
好讓我如果有很多組要兩兩筆較時候,讓別人比較容易看
03/08 15:38, 13F

03/08 15:38, , 14F
麻煩了 感謝你!!
03/08 15:38, 14F

03/08 17:23, , 15F
感謝我找到那個參數了!!就是"at" 感謝你!
03/08 17:23, 15F
文章代碼(AID): #1K-59pjy (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1K-59pjy (R_Language)