网站情节中的 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
我正在尝试使用 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