ggplotly映射空首层级因子至frame时数据异常,是否为已知Bug?
R语言plotly包动画映射factor变量的Bug反馈及临时解决方法
Bug现象说明
在使用ggplot2的frame美学映射创建动画图表,再通过ggplotly()转换为交互式动画时,若frame绑定的是存在空层级的factor变量,会出现两种异常:
- 当首层级无数据时,ggplotly生成的动画无任何数据显示
- 当非首层级无数据时,切换到该空层级会错误显示其他层级的数据
复现代码
library(ggplot2) library(plotly) library(dplyr) # 需加载dplyr以使用filter和mutate df <- data.frame( x = c(0, 1, 2, 0, 1, 2, 0, 1, 2), y = c(0, 1, 2, 1, 2, 3, 3, 4, 5), f = factor(c("A", "A", "A", "B", "B", "B", "C", "C", "C")) ) # 移除不同层级数据的图表 no_A <- filter(df, f != "A") |> ggplot(aes(x = x, y = y, frame = f)) + geom_line() + ggtitle("no_A") no_B <- filter(df, f != "B") |> ggplot(aes(x = x, y = y, frame = f)) + geom_line() + ggtitle("no_B") no_C <- filter(df, f != "C") |> ggplot(aes(x = x, y = y, frame = f)) + geom_line() + ggtitle("no_C")
测试异常结果
ggplotly(no_A):切换到滑块的B或C层级时,无任何数据显示ggplotly(no_B):先切换到C层级后再切回B层级,B层级会错误显示C层级的数据ggplotly(no_C):先切换到B层级后再切回C层级,C层级会错误显示B层级的数据
临时解决方法
将绑定frame的factor变量转换为字符型即可避免该问题,修改代码如下:
df <- mutate(df, f = as.character(f))
内容的提问来源于stack exchange,提问作者David Lovell
相关产品推荐
相关产品推荐

