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
相关产品推荐
相关产品推荐

