Re: [問題] ggplot2迴圈

看板R_Language作者 (天)時間9年前 (2016/12/05 13:36), 9年前編輯推噓2(201)
留言3則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《CAPPON (JI3)》之銘言: : 舉個例子 : aaa=matrix(c("A","A","A","B","B","B","C","C","A1","A2","A3","A1","A2","A3","A1 : ","A2",0.92,0.95,0.94,0.91,0.99,0.98,0.88,0.91,0.92,0.94,0.95,0.96,0.98,0.92,0 : .94,0.92),8,4) : dimnames(aaa)[[2]]=c("Index","Item","M08","12/2") : 1.by index畫圖,相同的index畫在同一張,item為每一條線。所以會有3張圖...想要一頁 : 呈現2張圖 : 2.因欄位名稱有文字跟日期...該怎麼處理呢?日期部份讀入會變成x12.2 : 遇到這2個問題,再麻煩前輩幫忙了 : 謝謝 : ※ 引述《CAPPON (JI3)》之銘言: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [環境敘述]: : : R version 3.3.2 : : 請教前輩 : : 想用ggplot產生多張圖 , 一頁放6張圖 : : 用迴圈去寫時,無法產生圖形 : : 不曉得是哪裡出錯了 : : 但如果用i=1 , i=2 一個一個跑卻是沒問題 : : 另外 產生的pdf檔圖形的大小是否可以更改呢? : : 謝謝 : : pdf(file=paste("D:\\123123", ".pdf", sep="")) : : for ( i in 1:2){ : : ggplot(data_melt_TN[data_melt_TN[,3]==TN[(i-1)*6+1]|data_melt_TN[,3]==TN[(i- : 1) : : aes(x = variable, y = value, group = id, : : colour = Item)) + geom_point(cex=2) + geom_line() : + : : scale_color_manual(values=c("red","orange","green"))+ : : facet_wrap(~Index,ncol=2)+ : : theme(axis.text.x = element_text(angle = 90, hjust = 1,size=12)) : : } : : dev.off() 我不知道你圖的x軸是什麼,我隨便抓一個來畫 再來是character, numeric混雜的資料請用data.frame 如果連R的基本物件data.frame都不熟 建議先去找本R書念熟,或是參考置底的R翻轉教室學習相關知識再繼續比較好 不然下面的程式對你來說,非 常 困 難 我已經盡量用我想到最簡單的方法去寫了 但是do.call那段,我想不到更好的解法,只能用那個方法... 至於grid跟gridExtra,裡面有不少東西,要玩到通透要花一點時間 (我也不熟) 再來是關於你問的日期部分,要自己轉換 下面就是程式碼: library(ggplot2) library(grid) library(gridExtra) DF <- data.frame(Index = c("A","A","A","B","B","B","C","C"), Item = c("A1","A2","A3","A1","A2","A3","A1","A2"), M08 = c(0.92,0.95,0.94,0.91,0.99,0.98,0.88,0.91), Dec02 = c(0.92,0.94,0.95,0.96,0.98,0.92,0.94,0.92), stringsAsFactors = FALSE) uniIndex <- unique(DF$Index) graphs <- vector("list", length(uniIndex)) for (i in seq_along(uniIndex)) graphs[[i]] <- ggplot(subset(DF, DF$Index == uniIndex[i]), aes(M08, Dec02))+ geom_line() pdf("graphs.pdf") for (i in 1:ceiling(length(uniIndex) / 2)) { k <- (2*i-1):min(2*i, length(uniIndex)) if (length(k) == 2) { print(do.call(grid.arrange, c(graphs[k], list(ncol = 2)))) } else { print(do.call(grid.arrange, list(graphs[[k]], nullGrob(), ncol = 2))) } } dev.off() grid.arrange其他參數可以在arrangeGrob找到 參數設定方式就是跟ncol放在同一個list就好 最後,我覺得如果你要用ggplot完成你想要的圖 真的需要花一點時間去找,然後刻出來 這裡也不只這種方法,還可以一次過濾兩種index 然後用facet_wrap(~Index)去處理,再把這圖print出來 這樣最後也能達到類似的效果,只是第三張圖會是全幅的 當然這方法會比我寫的簡單,這裡我就只敘述而已 -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.28.152 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1480916213.A.40F.html ※ 編輯: celestialgod (111.246.28.152), 12/05/2016 13:42:47

12/05 14:51, , 1F
推清楚,其實ggplot2+gridExtra蠻多細緻撇步真的要善用
12/05 14:51, 1F

12/05 14:53, , 2F
google比如multiple facet grid gridExtra 很多個人特殊
12/05 14:53, 2F

12/05 14:55, , 3F
需求網路上其實都有解法,前陣為了paper做圖都靠孤狗大神
12/05 14:55, 3F
文章代碼(AID): #1OHFprGF (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
1
9
文章代碼(AID): #1OHFprGF (R_Language)