gpt4 book ai didi

r - 在scale_x_date和scale_x_datetime之间进行选择的包装器

转载 作者:行者123 更新时间:2023-12-02 04:11:38 26 4
gpt4 key购买 nike

scale_x_date用于“日期”和 scale_x_datetime用于“POSIXct”,是否可以有一个包装器来自动决定选择两者中的哪一个,因为两者甚至具有相同的函数参数。

与此类似,但其参数(数据)取 self 的几何美学:

scale_x_date_flex <- function(date_labels = "%B",date_breaks = "months")){

if(any(class(DF$Date) =="POSIXct")){
return(scale_x_datetime(date_labels = date_labels ,date_breaks = date_breaks))
}else{
return(scale_x_date(date_labels = date_labels ,date_breaks = date_breaks))
}
}

最佳答案

这是可能的。但是,由于使用 + 时无法访问绘图的数据(据我所知),我们必须使用 magrittr 管道才能进行测试x 美学类别。

函数

scale_x_date_flex <- function(plot,
date_labels = "%B",
date_breaks = "months") {

if ("POSIXct" %in% class(plot$data[[quo_name(plot$mapping$x)]])) {
message("scale_x_datetime")
return(plot + scale_x_datetime(date_labels = date_labels, date_breaks = date_breaks))
} else {
message("scale_x_date")
return(plot + scale_x_date(date_labels = date_labels, date_breaks = date_breaks))
}

}

示例

library(ggplot2)
library(magrittr)

last_month_date <- Sys.Date() - 0:29
last_day_time <- Sys.time() - 0:29 * (60 * 60)

df <- data.frame(
date = last_month_date,
time = last_day_time,
price = runif(30)
)


base_d <- ggplot(df, aes(date, price)) +
geom_line()

base_t <- ggplot(df, aes(time, price)) +
geom_line()



base_d %>% scale_x_date_flex(date_labels = "%d", date_breaks = "5 days")
#> scale_x_date

base_t %>% scale_x_date_flex(date_labels = "%d %H:%M", date_breaks = "5 hour")
#> scale_x_datetime

但是您仍然可以在 ggplot 命令链中间使用它。所以这会起作用:

base_d %>% scale_x_date_flex(date_labels = "%d", date_breaks = "5 days") + theme_bw()

reprex package于2019年9月13日创建(v0.3.0)

关于r - 在scale_x_date和scale_x_datetime之间进行选择的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922470/

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