R语言plotly多x轴折线图添加frame参数异常如何修复?
问题原因
- plotly的
frame参数仅支持传入单一向量作为分组依据,不识别list(year, month)格式的组合值,无法正确匹配每个数据点对应的帧。 - 若以年+月的组合作为帧分组,每个帧仅包含1个对应时间点的数据点,折线图需要至少2个连续点才能正常渲染,因此出现显示异常。
修复方案
方案1:按年份切换帧(常规需求,每个帧展示当年12个月的数值走势)
library(plotly) library(dplyr) datatoplot<-structure(list(year = c(1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399), month = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), v10 = c(2.8, 5.1, 6.3, 4.8, 4.1, 2.9, 3, 3.6, 4.4, 4.1, 3.4, 5.9, 1.7, 2.5, 2.1, 2.7, 2.3, 3, 3.2, 3.6, 2, 2, 1.6, 2.6, 1.5, 4, 2.9, 3.6, 3.6, 2.5, 2.2, 1.6, 1.9, 2.2, 3.6, 4.5), v14 = c(0.67, 0.65, 0.56, 0.65, 0.73, 0.67, 0.6, 0.64, 0.61, 0.61, 0.69, 0.64, 0.69, 0.75, 0.76, 0.73, 0.76, 0.68, 0.73, 0.92, 0.69, 0.66, 0.78, 0.71, 0.67, 0.68, 0.69, 0.73, 0.68, 0.76, 0.73, 0.81, 0.75, 0.8, 0.8, 0.71)), row.names = c(NA, 36L), class = "data.frame") datatoplot %>% plot_ly(alpha = 0.5) %>% add_lines( x = ~month, y = ~v10, frame = ~year, line = list(simplify = FALSE) ) %>% layout( xaxis = list(title = "月份"), yaxis = list(title = "A") )
方案2:实现按月递进的累积折线动画
如果需要折线随时间逐步延长,先对数据集做扩展,保证每个帧包含从起始时间到当前时间的所有历史数据:
# 构造年月唯一标识,生成动画用扩展数据集 datatoplot <- datatoplot %>% mutate(ym = paste(year, month, sep = "-")) anim_data <- lapply(unique(datatoplot$ym), function(curr_ym){ datatoplot %>% filter(ym <= curr_ym) %>% mutate(frame = curr_ym) }) %>% bind_rows() # 绘制动画 anim_data %>% plot_ly(alpha = 0.5) %>% add_lines( x = ~ym, y = ~v10, frame = ~frame, line = list(simplify = FALSE) ) %>% layout( xaxis = list(title = "年月", tickangle = -45), yaxis = list(title = "A") )
内容的提问来源于stack exchange,提问作者Masoud
相关产品推荐
相关产品推荐

