如何在ggplotly图表中添加变量并设置独立Y轴,同时自定义变量颜色
我来帮你搞定这个需求!你想要给var3添加独立的右侧Y轴,同时自定义所有变量的颜色对吧?我调整了你的代码,完美实现这两个功能,还优化了图表的可读性:
修改后的完整代码
library(tidyr) library(ggplot2) library(plotly) # 生成原始数据 data <- data.frame(Date = seq(as.Date("2018-02-03"), as.Date("2019-05-05"), by = "days"), var1 = runif(457), var2 = runif(457)) %>% tidyr::pivot_longer(-Date, names_to = "variable", values_to = "value") data2 <- data.frame(Date = seq(as.Date("2018-02-03"), as.Date("2019-05-05"), by = "days"), var3 = runif(457) * 100) %>% tidyr::pivot_longer(-Date, names_to = "variable", values_to = "value") # 构建图表 plot <- ggplot() + # 堆叠柱状图(主Y轴:对应var1、var2) geom_bar(data = data, aes(x = Date, y = value, fill = variable), stat = 'identity', position = "stack") + # 折线图(映射到次Y轴:对应var3) geom_line(data = data2, aes(x = Date, y = value, colour = variable), linewidth = 1) + # 设置双Y轴:主Y轴和右侧独立次Y轴 scale_y_continuous( name = "var1 & var2 数值", sec.axis = sec_axis(~., name = "var3 数值") ) + # 自定义柱状图填充色(对应var1、var2) scale_fill_manual(values = c("#A90046", "#D1EAFE"), name = "柱状图变量") + # 自定义折线图颜色(对应var3) scale_color_manual(values = "#EDF2F4", name = "折线图变量") + theme_minimal() + # 优化主题:让次Y轴颜色和折线匹配,提升可读性 theme( axis.title.y.right = element_text(color = "#EDF2F4"), axis.text.y.right = element_text(color = "#EDF2F4"), legend.position = "bottom" ) # 转换为交互式图表 ggplotly(plot)
关键修改说明
- 添加独立Y轴:通过
scale_y_continuous的sec.axis参数创建右侧次Y轴,这里直接用~.是因为var3的数值范围(0-100)和主Y轴(0-1)天然区分,不需要额外的数值转换;如果后续变量量级不同,你可以在这里写转换公式,比如~./100来对齐刻度。 - 自定义颜色生效:把你注释掉的
scale_fill_manual和scale_color_manual移到了所有图层之后,这样它们能正确绑定对应的填充/颜色映射,不会被后续图层覆盖。 - 可读性优化:给两个Y轴设置了明确的名称,调整了次Y轴的文字颜色和折线颜色一致,还把图例移到了底部,避免遮挡图表内容。
内容的提问来源于stack exchange,提问作者Mark Perez
相关产品推荐
相关产品推荐

