在RMarkdown中使用Plotly时轴标题与轴刻度重叠问题求助
解决ggplotly在slidy_presentation中x轴标题与刻度重叠的问题
我懂这种困扰——ggplot转plotly的时候,经常会遇到布局上的小冲突,毕竟两者的渲染逻辑不一样,你在ggplot里设置的主题参数有时候没法完全被plotly继承。试试下面这几个调整方法,应该能解决x轴标题和刻度重叠的问题:
方案1:增大底部边距+下移x轴标题
直接在plotly的layout里调整底部边距,同时把x轴标题往下挪动一点,给刻度标签留出足够空间:
ggplotly(g)%>% config(displayModeBar = FALSE) %>% layout(hovermode = 'compare', margin = list(b = 80), # 增大底部边距,数值可以根据你的图表大小调整 xaxis = list(title = list(y = -0.15))) # 把x轴标题向下偏移,单位是相对坐标
方案2:额外调整刻度标签内边距
如果方案1还不够,可以给x轴刻度标签加内边距,进一步拉开和标题的距离:
ggplotly(g)%>% config(displayModeBar = FALSE) %>% layout(hovermode = 'compare', margin = list(b = 80), xaxis = list(tickangle = 90, tickpadding = 10, # 给垂直的刻度标签增加底部内边距 title = list(y = -0.15)))
完整可运行代码示例
把调整后的逻辑整合到你的代码里,最终版本如下:
--- title: | SLIDES author: | ME date: | `r format(Sys.time(), '%d %B, %Y')` output: slidy_presentation runtime: knitr --- ```{r my.chunk, echo=FALSE, fig.width = 18, fig.height = 9, results='asis', message=FALSE} require(ggplot2) require(plotly) d<-data.frame(Year=rep(c(2020:2024),6),Group=rep(c('A','B','C'),each=10),Item=rep(c('w','v'),each=5), Value=round(runif(30,100,500),0)) g<-ggplot(d, aes(Year,Value,fill=Item ))+ geom_bar( position = "stack", stat = "summary", fun.y = "sum",na.rm=T)+ scale_y_continuous(labels = scales::comma) + scale_fill_manual(values=c('red','green'), breaks=c('w','v'))+ labs(title='TITLE',x = 'Year', y = 'Value')+ facet_grid(. ~ Group)+ theme(axis.text.x = element_text(angle = 90, hjust = 1,size=11,margin = margin(b = 5))) ggplotly(g)%>% config(displayModeBar = FALSE) %>% layout(hovermode = 'compare', margin = list(b = 80), xaxis = list(title = list(y = -0.15), tickpadding = 10))
### 为什么这些方法有效? ggplot的`theme`设置里的边距参数,在转换为plotly对象时并不会完全被继承。通过直接在plotly的`layout`中调整底部外边距(`margin$b`),可以给x轴区域留出更多垂直空间;而调整x轴标题的`y`位置和刻度标签的`tickpadding`,则能进一步避免标题和垂直排列的刻度标签重叠。你可以根据自己的图表尺寸,微调`b`和`y`的数值,找到最适合的布局。 内容的提问来源于stack exchange,提问作者José Fernando Giraldo Jimenez
相关产品推荐
相关产品推荐

