网站情节中的 y 轴与 r 中的 ggplotly 重叠

y-axis overlap in website plot with ggplotly in r

我正在尝试使用 plotly 包中的 ggplotly() 函数将 facet plot 转换为 html 样式。

一切正常,但 y 轴重叠。而且我不知道怎么解决。

可重现的代码如下:

library(tidyverse)
library(plotly)
state <- 1:31 %>% as.character()
disease <- 1:40 %>% as.character()
city <- LETTERS[1:2]
value <- runif(n = 31*40*2)

df <- expand.grid(state = state,
                 disease = disease,
                 city = city) %>% cbind(value)

p <- df %>% 
  ggplot(aes(x = city, y = disease, fill = value)) +
  geom_tile() + 
  scale_fill_gradient(high = '#FF0000', low = 'white') +
  theme(axis.line = element_line(linetype = 'solid')) + 
  theme_classic() +
  scale_x_discrete(expand = c(0,0)) +
  scale_y_discrete(expand = c(0,0)) +
  facet_wrap(vars(state))
p

web_p <- ggplotly(p)
web_p

不幸的是,ggplot2 3.3 中包含的新 guide_axis() 技巧使用 n.dodge 和 check.overlap 参数,目前对您的 ggplotly() 输出没有影响: https://www.tidyverse.org/blog/2020/03/ggplot2-3-3-0/#rewrite-of-axis-code

另一种选择是使用双 y 轴和数字数据,并在两者之间拆分标签,但再次, plotly 会忽略它。

ggplot2 的很多功能不会轻易转化为交互式绘图可视化。

我能想到的最佳解决方法是调整中断标签的字体大小,并更改构面的布局,以便为标签提供更多 space(假设信息少得多在您的 x 轴上显示):

library(tidyverse)
state <- 1:31 %>% as.character()
disease <- 1:40 %>% as.character()
city <- LETTERS[1:2]
value <- runif(n = 31*40*2)

df <- expand.grid(state = state,
                  disease = disease,
                  city = city) %>% cbind(value)

p <- df %>% 
  ggplot(aes(x = city, y = disease, fill = value)) +
  geom_tile() + 
  scale_fill_gradient(high = '#FF0000', low = 'white') +
  theme(axis.line = element_line(linetype = 'solid')) + 
  theme_classic() +
  scale_x_discrete(expand = c(0,0)) +
  scale_y_discrete(expand = c(0,0)) +
  facet_wrap(vars(state), nrow = 3) +
  theme(axis.text.y = element_text(size = 4))
p

reprex package (v0.3.0)

于 2020-10-29 创建

转换为绘图可视化时将保留这些设置:

web_p <- ggplotly(p)
web_p