Re: [問題] 想畫多組XY折線圖,X數值和長度都不同

作者: LIAR (玻璃做的大叔)   2021-06-02 23:55:10
: 推 andrew43: 建議先melt成 long table,一列一個觀測,有一個病人多 05/26 22:56
: → andrew43: 列。 05/26 22:56
: → andrew43: 每一個病人多列。 05/26 22:57
: → andrew43: 之後ggplot,並facet_warp(vars(病人id)) 05/26 22:59
: → andrew43: facet可以指定scales 05/26 23:00
: 推 locka: 推A大,補充一下ggplot的哲學就是把資料整理成long table~ 05/27 03:24
: 推 locka: (是說如果病人id很多個,分組畫出來的圖會很擠很擠喔,慎用 05/27 03:24
: 推 locka: ) 05/27 03:24
抱歉我發現我沒有講清楚,我是要畫在同一張圖,不過根據facet的功能,比較像是
把許多小圖組合成一張大圖,像是論文的fig.1A, fig.1B, fig.1C那樣,而我想要
的是:
https://imgur.com/a/zQxKbg9
這種的,
紅線有到40天,綠線不到20天;紅線20天前只有5~6點,藍線超過10點以上。
然後要合再一起畫圖。
我當時電腦因為不明原因無法安裝ggplot2,後來用plot + lines,用迴圈搞出
上面那張圖出來,
plot(analysisArray[testGroup[i],1,], analysisArray[testGroup[i],Y+1,],
xlim = range(analysisArray[,1,],na.rm = TRUE),
ylim = range(analysisArray[,Y+1,],na.rm = TRUE),
xlab=names(MySheet)[repPos], ylab=names(MySheet)[repPos+Y],
pch=16, cex=1, type = "b",col=colors[i] , main=paste("手術組",
titleName[Y]))
for(i in 2:length(testGroup)){
lines(analysisArray[testGroup[i],1,], analysisArray[testGroup[i],Y+1,],
pch=16, cex=1, type = "b",col=colors[i])
}
另外有鄉民網友提供ggplot2的解
ggplot() +
geom_line(data=p1, aes(x=dates, y=val, color="p1")) +
geom_point(data=p1, aes(dates,val), color="red") +
geom_line(data=p2, aes(x=dates, y=val, color="p2")) +
geom_point(data=p2, aes(dates,val), color="darkcyan") +
scale_x_datetime(breaks=unique(combine(dates1, dates2)),
date_labels = '%m/%d') +
theme(axis.text.x = element_text(size = 10,
vjust = 0.5,
hjust = 0.5,
angle = 90))
以上,回報目前的成果。謝謝各位的幫忙!
作者: cywhale (cywhale)   2021-06-03 10:58:00
基本上還是要把資料用成long table 不同顏色的組別資料就在資料上給予一個組別變數比如grp ggplot(aes(x=time,y=value,colour=grp), data=dt) 可以畫出類似你的範例圖

Links booklink

Contact Us: admin [ a t ] ucptt.com