R Plotly堆叠子图:隐藏图例并添加子图坐标轴标签
在R Plotly中为子图添加独立轴标签并隐藏图例
隐藏图例
你可以通过两种方式隐藏所有子图的图例:
- 使用全局的
hide_legend()方法(你已在代码中使用) - 创建每个子图时直接设置
showlegend = FALSE,避免额外的全局调用,示例:
fig1 <- plot_ly(x = c(3, 4, 5), y = c(1000, 1100, 1200), type = 'scatter', mode = 'lines+markers', showlegend = FALSE)
为每个子图添加独立轴标签
Plotly的subplot会自动为垂直堆叠的子图分配轴编号:3个子图对应yaxis1/yaxis2/yaxis3(y轴)、xaxis1/xaxis2/xaxis3(x轴)。你可以在layout()中针对每个轴单独设置标签和样式。
情况1:为每个子图添加左侧y轴标签(共享x轴)
保持shareX = TRUE的同时,给每个y轴设置独立标题:
library(plotly) fig1 <- plot_ly(x = c(3, 4, 5), y = c(1000, 1100, 1200), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig2 <- plot_ly(x = c(2, 3, 4), y = c(100, 110, 120), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig3 <- plot_ly(x = c(0, 1, 2), y = c(10, 11, 12), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig <- subplot(fig1, fig2, fig3, nrows = 3, shareX = TRUE) %>% layout(title = list(text = "Stacked Subplots"), plot_bgcolor='#e5ecf6', # 共享x轴的样式设置 xaxis = list( zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff'), # 第一个子图的y轴标签 yaxis1 = list( title = "数值(千)", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' ), # 第二个子图的y轴标签 yaxis2 = list( title = "数值(百)", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' ), # 第三个子图的y轴标签 yaxis3 = list( title = "数值(个)", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' )) fig
情况2:为每个子图添加上方x轴标签(不共享x轴)
若需要每个子图的x轴都在上方并带有独立标签,需关闭shareX = TRUE,然后为每个x轴设置side = "top"和标题:
library(plotly) fig1 <- plot_ly(x = c(3, 4, 5), y = c(1000, 1100, 1200), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig2 <- plot_ly(x = c(2, 3, 4), y = c(100, 110, 120), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig3 <- plot_ly(x = c(0, 1, 2), y = c(10, 11, 12), type = 'scatter', mode = 'lines+markers', showlegend = FALSE) fig <- subplot(fig1, fig2, fig3, nrows = 3, shareX = FALSE) %>% layout(title = list(text = "Stacked Subplots"), plot_bgcolor='#e5ecf6', # 第一个子图的上方x轴标签 xaxis1 = list( title = "类别A", side = "top", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' ), # 第二个子图的上方x轴标签 xaxis2 = list( title = "类别B", side = "top", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' ), # 第三个子图的上方x轴标签 xaxis3 = list( title = "类别C", side = "top", zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff' ), # 统一y轴样式(也可单独设置) yaxis = list( zerolinecolor = '#ffff', zerolinewidth = 2, gridcolor = 'ffff')) fig
内容的提问来源于stack exchange,提问作者J White
相关产品推荐
相关产品推荐

