gpt4 book ai didi

r - ggplot2 更改每个单独方面面板的轴限制

转载 作者:行者123 更新时间:2023-12-04 11:47:48 24 4
gpt4 key购买 nike

library(tidyverse)
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(rows = vars(drv), scales = "free")



上面的ggplot代码由三个面板 4组成, f , 和 r .我希望每个面板的 y 轴限制如下:

Panel y-min y-max breaks
----- ----- ----- ------
4 5 25 5
f 0 40 10
r 10 20 2

如何修改我的代码来实现这一点?不确定是否 scale_y_continuous更有意义或 coord_cartesian ,或两者的某种组合。

最佳答案

这是一个长期存在的功能请求(参见,例如, 200920112016 )由单独的包 facetscales 处理.

devtools::install_github("zeehio/facetscales")
library(g)
library(facetscales)
scales_y <- list(
`4` = scale_y_continuous(limits = c(5, 25), breaks = seq(5, 25, 5)),
`f` = scale_y_continuous(limits = c(0, 40), breaks = seq(0, 40, 10)),
`r` = scale_y_continuous(limits = c(10, 20), breaks = seq(10, 20, 2))
)
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid_sc(rows = vars(drv), scales = list(y = scales_y))

enter image description here

如果每个方面的参数都存储在数据帧中 facet_params ,我们可以计算语言来创建 scale_y :
library(tidyverse)
facet_params <- read_table("drv y_min y_max breaks
4 5 25 5
f 0 40 10
r 10 20 2")

scales_y <- facet_params %>%
str_glue_data(
"`{drv}` = scale_y_continuous(limits = c({y_min}, {y_max}), ",
"breaks = seq({y_min}, {y_max}, {breaks}))") %>%
str_flatten(", ") %>%
str_c("list(", ., ")") %>%
parse(text = .) %>%
eval()

关于r - ggplot2 更改每个单独方面面板的轴限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com