如何使R语言Plotly柱状折线图中的折线呈现连续完整状态?
让Plotly折线图从图表两端延伸的解决方案
这个问题其实是因为你的折线数据点刚好落在每个月的1号,而Plotly的日期轴会自动把月份显示为一个区间(比如2019-Dec是从11月底到12月底的范围),所以折线点就落在了区间中间,看起来没有贯穿整个图表。
要解决这个问题,我们只需要给折线数据(DF1)添加两个额外的边界点,让折线的起始点对应x轴的最左端,结束点对应x轴的最右端,同时保持y值和相邻月份一致。具体步骤如下:
- 确定x轴的最小边界日期:比如2019年11月30日(12月的前一天),y值和2019-Dec的y值相同(20)
- 确定x轴的最大边界日期:比如2020年2月29日(2月的最后一天),y值和2020-Feb的y值相同(9)
- 把这两个点添加到DF1中,再重新绘图
修改后的完整代码如下:
library(dplyr) library(plotly) library(lubridate) DF <- data.frame( Month = as_date(c("2019-Dec-01", "2019-Dec-01","2020-Jan-01","2020-Jan-01","2020-Jan-01", "2020-Feb-01", "2020-Feb-01")), Cat = c("A", "C", "A", "B", "C", "A", "C"), n = c(38L, 10L, 19L, 20L, 12L, 14L, 20L) ) DF1 <- data.frame( Month = as_date(c("2019-Dec-01", "2020-Jan-01", "2020-Feb-01")), n = c(20L, 41L, 9L) ) # 添加边界点 DF1_extended <- DF1 %>% add_row(Month = as_date("2019-11-30"), n = 20) %>% # 12月前的边界,y值和12月一致 add_row(Month = as_date("2020-02-29"), n = 9) %>% # 2月后的边界,y值和2月一致 arrange(Month) # 按日期排序 plot_ly() %>% add_bars(data = DF, x = ~Month, y = ~n, type = 'bar', split = ~Cat) %>% add_lines(data = DF1_extended, x = ~Month, y = ~n, color = I("black")) %>% layout(barmode = "stack", xaxis = list(type = 'date', tickformat = '%Y-%b', tickangle = 90, nticks = 4))
这样修改后,折线就会从图表的最左侧(2019年11月底)一直延伸到最右侧(2020年2月底),完美呈现连续的效果啦!
内容的提问来源于stack exchange,提问作者Williams86
相关产品推荐
相关产品推荐

