Plotly子图中修改瀑布图增减项颜色的技术求助
解决Plotly瀑布图增长/下降项颜色不生效问题
问题背景
我尝试修改Plotly瀑布图中增长项与下降项的颜色,希望下降项为绿色、增长项为红色,但在plot_ly()函数中添加increasing和decreasing属性后未生效,颜色始终保持默认。
原始数据
structure(list(Date = structure(c(1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600, 1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600, 1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800, 1585699200, 1588291200, 1590969600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Percent_change = c(-45, -50, -25, -30, -40, -35, -1, -5, -25, 30, 45, 50, -30, -40, -35, -1, -5, -25, 50, -45, -30, -15, -20, -35, -1, -5, -25), Toys = c("Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 1", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 2", "Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3", "Toy 3")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -27L))
原始代码
my_plot <- . %>% plot_ly(x = ~Date, y = ~Percent_change, type = "waterfall", hoverinfo = "text", hovertext = ~paste("Date :", Date, "<br> % Change:", Percent_change), increasing = (marker = list(color = "Maroon")), decreasing = (marker = list(color = "Teal")), totals = (marker = list(color = "blue"))) %>% add_annotations( text = ~unique(Toys), x = 0.5, y = 1, yref = "paper", xref = "paper", xanchor = "middle", yanchor = "top", showarrow = FALSE, font = list(size = 15) )
问题原因
核心问题是语法错误:给increasing、decreasing参数赋值时使用了括号()而非花括号{},且没有正确用list()构建嵌套参数结构。Plotly R要求这类配置参数必须是多层嵌套的列表格式。
修正后的代码
# 先对数据按Toys分组(匹配原始代码的分组逻辑) my_plot <- your_data %>% group_by(Toys) %>% plot_ly(x = ~Date, y = ~Percent_change, type = "waterfall", hoverinfo = "text", hovertext = ~paste("Date :", Date, "<br> % Change:", Percent_change), # 修正语法,按需求设置颜色:增长项红,下降项绿 increasing = list(marker = list(color = "red")), decreasing = list(marker = list(color = "green")), totals = list(marker = list(color = "blue"))) %>% add_annotations( text = ~unique(Toys), x = 0.5, y = 1, yref = "paper", xref = "paper", xanchor = "middle", yanchor = "top", showarrow = FALSE, font = list(size = 15) )
关键修正点
- 将
(marker = list(...))替换为list(marker = list(...)),符合R的列表嵌套语法要求 - 按照需求设置颜色:正数值的增长项设为
red,负数值的下降项设为green - 补充
group_by(Toys)步骤,确保每个玩具的瀑布图独立生成(匹配原始数据的分组逻辑)
内容的提问来源于stack exchange,提问作者QMan5
相关产品推荐
相关产品推荐

