[問題] Color background of a ggplot2 bar plot

作者: luenchang (luen)   2023-11-25 10:53:22
小弟的數據是自已Strava帳號上面下載的活動記錄。我想要把2023年在各種活動中所花的
時間畫個bar plot。2023有在3個不同的時區,所以也想把時區在圖上利用背景色呈現出
來。目前已經畫出bar plot,遇到的問題是我所用的 geom_rect()並沒有把背景上色,好
像只有在背景色區塊xmin, xmax各插入白色的bar. 和我參考stack overflow上有用
geom_rect() 改變背景色的圖都不一樣。不知道是geom_rect不適用於bar plot,還是我
的寫法有錯,或是有更簡潔的其他的function可以改變背景色。
geom_rect()需要指定區塊在x, y軸上的坐標,我的原始數據裡並沒有這個,為了使用
geom_rect(), 我手動產生 time.zones這個data.frame把每個時區的日期範圍寫死。如果
最後是用geom_rect()來改變背景色,也希望能用比較好的方式產生time.zones. 因為時
區Australia/Brisbane重複了3次,用 group_by()來拿出開始及結束日期的話,出來的數
據會去除掉重複的。這部分我也不知道該如何做。
我把畫出來的圖 (plot generated)
![color-date-ranges-by-timezones[1]have](https://hackmd.io/_uploads/ryO8HRR4p.jpg)
想要的圖 (plot desired)
![color-date-ranges-by-timezones[2]want](https://hackmd.io/_uploads/rJVDBRCEp.jpg)
數據在Google drive 上的連結,及我的程式放在hackmd上
https://hackmd.io/@Chang/adverse-events-gantt-chart
感謝各位先進的指點
作者: luenchang (luen)   2023-11-27 10:44:00
原本的問題出在於有兩個fill= 要修改,但是只用了1個scale_fill_manual(). 加了ggnewscale::new_scale_fill()及第二個scale_fill_manual()後背景色有出來了。現在我的問題變成如何移除margin, 並且讓x軸月份結束於2023 Dec, 第二個x軸結束於52.
作者: hohiyan (海洋)   2023-11-28 00:27:00
sec.axis的部份用sec_axis而不是dup_axis,然後:https://imgur.com/a/d0zbBHS土法鍊鋼,也許有更有效的解法https://i.imgur.com/I2T5T2M.png

Links booklink

Contact Us: admin [ a t ] ucptt.com