You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中能否设置plot_ly坐标轴占绘图区域的固定比例?

R plotly 双y轴按比例分区绘图解决方案

完全可以实现该需求,你之前配置domain参数不生效的核心原因是保留了yaxis2的overlaying = "y"参数,该参数会强制两个y轴叠加在同一绘图区域,覆盖了domain的分区配置。

修正后完整可运行代码

require(tidyverse)
require(data.table)
require(stringr)
require(plotly)
require(processx)

# 模拟数据构造
Actuals <-c(1,2,3,4,5,6,7,8,9,10)       
set.seed(10)
UniqCoef1 <- runif(10, min=-1, max=1)    
NrmPolct1 <- c(.015,.005,.33,.32,.225,.025,.03,.05,NA ,NA)
dataframe1 <- data.frame(NrmPolct1,UniqCoef1,Actuals)

# 绘图代码
plot1 <- plot_ly(dataframe1) %>%
  add_trace(x=~Actuals, y=~UniqCoef1, type="scatter", mode="markers", name="Coef Values") %>%
  add_bars(x=~Actuals, y=~NrmPolct1, yaxis="y2", name="% Polcy Count") %>%
  layout(plot_bgcolor='#D0CFC9',
         # 左y轴:系数,占用顶部80%区域,domain参数控制垂直占比,0.2到1即80%高度
         yaxis=list(title="Coefficients", zeroline = FALSE,
                    domain = c(0.2, 1),
                    range=c(min(UniqCoef1)*0.98, max(UniqCoef1)*1.02), 
                    tickvals=UniqCoef1, standoff=30),
         # 右y轴:政策占比,占用底部20%区域,移除overlaying参数避免叠加
         yaxis2=list(side="right", tickvals=NrmPolct1,
                     domain = c(0, 0.2),
                     range=c(0, max(NrmPolct1, na.rm = T)*1.05),
                     title="% Polcy Count", standoff=30),
         xaxis=list(tickvals=Actuals,title="actuals",showgrid=T, standoff=30),
         title=paste0("# Actuals for State 23, Crop 41."))

plot1

核心修改说明

  • 用domain参数控制两个y轴的垂直占比:yaxis的domain = c(0.2, 1)表示占用绘图区垂直方向从20%位置到顶部的空间,刚好占总高度的80%;yaxis2的domain = c(0, 0.2)表示占用底部到20%位置的空间,占总高度的20%
  • 移除yaxis2的overlaying = "y"参数,关闭两个y轴的叠加模式,让domain配置生效
  • 两个轴的范围可根据数据实际情况灵活调整,不需要再用之前的缩放因子适配叠加场景,调整后散点和柱状图分属不同区域,完全不会互相遮挡

内容的提问来源于stack exchange,提问作者PDiddyA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:04