[问题] 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