Facet_Wrap标题与ggplotly中的y轴重叠?

Posted

技术标签:

【中文标题】Facet_Wrap标题与ggplotly中的y轴重叠?【英文标题】:Facet_Wrap title overlapping with y-axis in ggplotly? 【发布时间】:2021-07-28 01:31:51 【问题描述】:

我目前正在使用 facet_wrap 将数据 (html) 编织到 Rmarkdown 文档中。我希望使用 facet_wrap 和 ggplot 来显示这些数据。

这就是数据在 ggplot 中的外观(不是绘图):

但是,当我使用 plotly 时,每个图的标题都与 y 轴相交,因此难以解释

这是第一个不使用 plotly 的情节的代码

plot <-  ggplot(dataframe, aes(x = week, y = measure))+
  geom_line(size = 1.25, aes(color = "orange"))+
  geom_point(size = 1.50)+
  theme_economist()+
  geom_smooth(method = 'auto', se = FALSE, size = .50)+
  scale_x_continuous(breaks=seq(0,13,1))+
  scale_y_continuous(labels = scales::dollar_format(scale = .0001, suffix = "K"))+
  facet_wrap(vars(category), scales = "free", ncol = 3, nrow = 6)+
  theme(legend.position = "none")+
  ggtitle('Title')+
    theme(
    panel.grid.major = element_line(linetype = "dotted"),
    axis.title.x = element_text( size = 10, margin=margin(30,0,0,0)),
    axis.title.y = element_text( size = 10, margin=margin(0,30,0,0)),
    axis.text = element_text( size = 10),
    plot.title = element_text( size = 14, margin=margin(0,0,35,0), hjust = 0.5),
    panel.background = element_rect(fill = NA),
    strip.text = element_text(size=10)
  )

那么这就是我将其转换为 plotly 的方法

ggplotly(plot)

【问题讨论】:

【参考方案1】:

一些随机数据:

require(stats)
r <- function(x) abs(as.numeric(arima.sim(n=x, list(order=c(1,0,0),ar=0.95)))+10)
dataframe = data.frame(week = rep(1:13,6), measure = r(13*6), category = rep(as.character(1:6),each=13))

虽然我无法重现重叠的 y 轴标签,但您可以通过在 theme() 中设置 panel.margin.ypanel.margin.x 来设置多面图之间的边距:

plot <- ggplot(dataframe, aes(x = week, y = measure))+
  geom_line(size = 1.25, aes(color = "orange"))+
  geom_point(size = 1.50)+
  theme_economist() + 
  geom_smooth(method = 'auto', se = FALSE, size = .50)+
  scale_x_continuous(breaks=seq(0,13,1))+
  scale_y_continuous(labels = scales::dollar_format(scale = .0001, suffix = "K"))+
  facet_wrap(vars(category), scales = "free", ncol = 3, nrow = 6)+
  theme(legend.position = "none")+
  ggtitle('Title')+
    theme(
    panel.grid.major = element_line(linetype = "dotted"),
    axis.title.x = element_text( size = 10, margin=margin(30,0,0,0)),
    axis.title.y = element_text( size = 10, margin=margin(0,30,0,0)),
    axis.text = element_text( size = 10),
    plot.title = element_text( size = 14, margin=margin(0,0,35,0), hjust = 0.5),
    panel.background = element_rect(fill = NA),
    strip.text = element_text(size=10), panel.margin.x = unit(1,"lines"), panel.margin.y = unit(0,"lines")
  )
ggplotly(plot)

您可以微调边距以适合您的情节。

之前:

> ggplotly(plot)

之后:

> ggplotly(plot)

【讨论】:

以上是关于Facet_Wrap标题与ggplotly中的y轴重叠?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用带有 facet_wrap 的 ggplot2 显示多个轴标签

将刻面ggplots(facet_wrap)与R中的cowplot对齐

在 R 中使用 ggplot 和拼凑更改轴标签和比例

使用 ggplot facet_grid 或 facet_wrap 时修改面板轴的特定主题参数

在 ggplot2 的 facet-grid/facet_wrap 中调整面板的相对空间

将 x 和 y 轴添加到所有 facet_wrap