Move automatic nrow calculation to generate_and_save_plots
This commit is contained in:
@@ -513,20 +513,67 @@ generate_and_save_plots <- function(out_dir, filename, plot_configs) {
|
|||||||
static_plots <- list()
|
static_plots <- list()
|
||||||
plotly_plots <- list()
|
plotly_plots <- list()
|
||||||
|
|
||||||
|
# Retrieve grid layout if it exists, otherwise skip
|
||||||
grid_layout <- group$grid_layout
|
grid_layout <- group$grid_layout
|
||||||
plots <- group$plots
|
plots <- group$plots
|
||||||
|
|
||||||
|
# Only handle grid layout if it exists
|
||||||
|
if (!is.null(grid_layout)) {
|
||||||
|
# Set grid_ncol to 1 if not specified
|
||||||
|
if (is.null(grid_layout$ncol)) {
|
||||||
|
grid_layout$ncol <- 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# If ncol is set but nrow is not, calculate nrow dynamically based on num_plots
|
||||||
|
if (!is.null(grid_layout$ncol) && is.null(grid_layout$nrow)) {
|
||||||
|
num_plots <- length(plots)
|
||||||
|
nrow <- ceiling(num_plots / grid_layout$ncol)
|
||||||
|
message("No nrow provided, automatically using nrow = ", nrow)
|
||||||
|
grid_layout$nrow <- nrow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i in seq_along(plots)) {
|
for (i in seq_along(plots)) {
|
||||||
config <- plots[[i]]
|
config <- plots[[i]]
|
||||||
df <- config$df
|
df <- config$df
|
||||||
|
|
||||||
|
# Filter points outside of y-limits if specified
|
||||||
|
if (!is.null(config$ylim_vals)) {
|
||||||
|
out_of_bounds_df <- df %>%
|
||||||
|
filter(
|
||||||
|
is.na(.data[[config$y_var]]) |
|
||||||
|
.data[[config$y_var]] < config$ylim_vals[1] |
|
||||||
|
.data[[config$y_var]] > config$ylim_vals[2]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Print rows being filtered out
|
||||||
|
if (nrow(out_of_bounds_df) > 0) {
|
||||||
|
message("Filtered out rows outside y-limits:")
|
||||||
|
print(out_of_bounds_df)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Filter the valid data for plotting
|
||||||
|
df <- df %>%
|
||||||
|
filter(
|
||||||
|
!is.na(.data[[config$y_var]]) &
|
||||||
|
.data[[config$y_var]] >= config$ylim_vals[1] &
|
||||||
|
.data[[config$y_var]] <= config$ylim_vals[2]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
# Set up aes mapping based on plot type
|
# Set up aes mapping based on plot type
|
||||||
aes_mapping <- if (config$plot_type == "bar" || config$plot_type == "density") {
|
aes_mapping <- if (config$plot_type == "bar") {
|
||||||
if (!is.null(config$color_var)) {
|
if (!is.null(config$color_var)) {
|
||||||
aes(x = .data[[config$x_var]], fill = .data[[config$color_var]], color = .data[[config$color_var]])
|
aes(x = .data[[config$x_var]], fill = .data[[config$color_var]], color = .data[[config$color_var]])
|
||||||
} else {
|
} else {
|
||||||
aes(x = .data[[config$x_var]])
|
aes(x = .data[[config$x_var]])
|
||||||
}
|
}
|
||||||
|
} else if (config$plot_type == "density") {
|
||||||
|
if (!is.null(config$color_var)) {
|
||||||
|
aes(x = .data[[config$x_var]], color = .data[[config$color_var]])
|
||||||
|
} else {
|
||||||
|
aes(x = .data[[config$x_var]])
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!is.null(config$y_var) && !is.null(config$color_var)) {
|
if (!is.null(config$y_var) && !is.null(config$color_var)) {
|
||||||
aes(x = .data[[config$x_var]], y = .data[[config$y_var]], color = .data[[config$color_var]])
|
aes(x = .data[[config$x_var]], y = .data[[config$y_var]], color = .data[[config$color_var]])
|
||||||
@@ -573,63 +620,28 @@ generate_and_save_plots <- function(out_dir, filename, plot_configs) {
|
|||||||
|
|
||||||
# Add error bars if specified
|
# Add error bars if specified
|
||||||
if (!is.null(config$error_bar) && config$error_bar) {
|
if (!is.null(config$error_bar) && config$error_bar) {
|
||||||
# Check if a fixed color is provided or if it should come from a data column
|
|
||||||
error_bar_color <- config$error_bar_params$color
|
|
||||||
|
|
||||||
if (!is.null(config$error_bar_params$ymin) && !is.null(config$error_bar_params$ymax)) {
|
|
||||||
# Check if ymin and ymax are constants or column names
|
|
||||||
if (is.numeric(config$error_bar_params$ymin) && is.numeric(config$error_bar_params$ymax)) {
|
|
||||||
plot <- plot + geom_errorbar(
|
|
||||||
aes(x = .data[[config$x_var]]),
|
|
||||||
ymin = config$error_bar_params$ymin,
|
|
||||||
ymax = config$error_bar_params$ymax
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
# Map color_var to data if available
|
|
||||||
if (!is.null(config$color_var)) {
|
|
||||||
plot <- plot + geom_errorbar(
|
|
||||||
aes(
|
|
||||||
x = .data[[config$x_var]],
|
|
||||||
ymin = .data[[config$error_bar_params$ymin]],
|
|
||||||
ymax = .data[[config$error_bar_params$ymax]],
|
|
||||||
color = .data[[config$color_var]]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
plot <- plot + geom_errorbar(
|
|
||||||
aes(
|
|
||||||
x = .data[[config$x_var]],
|
|
||||||
ymin = .data[[config$error_bar_params$ymin]],
|
|
||||||
ymax = .data[[config$error_bar_params$ymax]]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
# Use mean and SD columns from df
|
|
||||||
y_mean_col <- paste0("mean_", config$y_var)
|
y_mean_col <- paste0("mean_", config$y_var)
|
||||||
y_sd_col <- paste0("sd_", config$y_var)
|
y_sd_col <- paste0("sd_", config$y_var)
|
||||||
|
# If color_var is provided and no fixed error bar color is set, use aes() to map color dynamically
|
||||||
if (y_mean_col %in% colnames(df) && y_sd_col %in% colnames(df)) {
|
if (!is.null(config$color_var) && is.null(config$error_bar_params$color)) {
|
||||||
if (!is.null(config$color_var)) {
|
|
||||||
plot <- plot + geom_errorbar(
|
plot <- plot + geom_errorbar(
|
||||||
aes(
|
aes(
|
||||||
x = .data[[config$x_var]],
|
x = .data[[config$x_var]],
|
||||||
ymin = .data[[y_mean_col]] - .data[[y_sd_col]],
|
ymin = .data[[y_mean_col]] - .data[[y_sd_col]],
|
||||||
ymax = .data[[y_mean_col]] + .data[[y_sd_col]],
|
ymax = .data[[y_mean_col]] + .data[[y_sd_col]],
|
||||||
color = .data[[config$color_var]]
|
color = .data[[config$color_var]] # Dynamic color from the data
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
# If a fixed error bar color is set, use it outside aes
|
||||||
plot <- plot + geom_errorbar(
|
plot <- plot + geom_errorbar(
|
||||||
aes(
|
aes(
|
||||||
x = .data[[config$x_var]],
|
x = .data[[config$x_var]],
|
||||||
ymin = .data[[y_mean_col]] - .data[[y_sd_col]],
|
ymin = .data[[y_mean_col]] - .data[[y_sd_col]],
|
||||||
ymax = .data[[y_mean_col]] + .data[[y_sd_col]]
|
ymax = .data[[y_mean_col]] + .data[[y_sd_col]]
|
||||||
|
),
|
||||||
|
color = config$error_bar_params$color # Fixed color
|
||||||
)
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -869,6 +881,7 @@ generate_interaction_plot_configs <- function(df, type) {
|
|||||||
# Common plot configuration
|
# Common plot configuration
|
||||||
plot_config <- list(
|
plot_config <- list(
|
||||||
df = df,
|
df = df,
|
||||||
|
plot_type = plot_type,
|
||||||
x_var = "conc_num_factor_factor",
|
x_var = "conc_num_factor_factor",
|
||||||
y_var = var,
|
y_var = var,
|
||||||
shape = 16,
|
shape = 16,
|
||||||
@@ -880,21 +893,18 @@ generate_interaction_plot_configs <- function(df, type) {
|
|||||||
|
|
||||||
# Add specific configurations for scatter and box plots
|
# Add specific configurations for scatter and box plots
|
||||||
if (plot_type == "scatter") {
|
if (plot_type == "scatter") {
|
||||||
plot_config$plot_type <- "scatter"
|
|
||||||
plot_config$title <- sprintf("%s Scatter RF for %s with SD", OrfRep, var)
|
plot_config$title <- sprintf("%s Scatter RF for %s with SD", OrfRep, var)
|
||||||
plot_config$error_bar <- TRUE
|
plot_config$error_bar <- TRUE
|
||||||
plot_config$error_bar_params <- list(
|
plot_config$error_bar_params <- list(
|
||||||
y_sd_prefix = "WT_sd_",
|
|
||||||
y_mean_prefix = "mean_",
|
|
||||||
color = "red",
|
color = "red",
|
||||||
center_point = TRUE
|
center_point = TRUE
|
||||||
)
|
)
|
||||||
plot_config$position <- "jitter"
|
plot_config$position <- "jitter"
|
||||||
|
|
||||||
annotations <- list(
|
annotations <- list(
|
||||||
list(x = 0.25, y = y_limits[1] + 0.1 * y_span, label = " NG ="), # Slightly above y-min
|
list(x = 0.25, y = y_limits[1] + 0.1 * y_span, label = " NG:"),
|
||||||
list(x = 0.25, y = y_limits[1] + 0.05 * y_span, label = " DB ="),
|
list(x = 0.25, y = y_limits[1] + 0.05 * y_span, label = " DB:"),
|
||||||
list(x = 0.25, y = y_limits[1], label = " SM =")
|
list(x = 0.25, y = y_limits[1], label = " SM:")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Loop over unique x values and add NG, DB, SM values at calculated y positions
|
# Loop over unique x values and add NG, DB, SM values at calculated y positions
|
||||||
@@ -909,11 +919,9 @@ generate_interaction_plot_configs <- function(df, type) {
|
|||||||
|
|
||||||
plot_config$annotations <- annotations
|
plot_config$annotations <- annotations
|
||||||
|
|
||||||
# Append to scatter plot configurations
|
|
||||||
stats_plot_configs <- append(stats_plot_configs, list(plot_config))
|
stats_plot_configs <- append(stats_plot_configs, list(plot_config))
|
||||||
|
|
||||||
} else if (plot_type == "box") {
|
} else if (plot_type == "box") {
|
||||||
plot_config$plot_type <- "box"
|
|
||||||
plot_config$title <- sprintf("%s Boxplot RF for %s with SD", OrfRep, var)
|
plot_config$title <- sprintf("%s Boxplot RF for %s with SD", OrfRep, var)
|
||||||
plot_config$position <- "dodge" # Boxplots don't need jitter, use dodge instead
|
plot_config$position <- "dodge" # Boxplots don't need jitter, use dodge instead
|
||||||
|
|
||||||
@@ -1001,6 +1009,7 @@ generate_interaction_plot_configs <- function(df, type) {
|
|||||||
x_breaks = unique(group_data$conc_num_factor_factor),
|
x_breaks = unique(group_data$conc_num_factor_factor),
|
||||||
x_labels = as.character(unique(group_data$conc_num)),
|
x_labels = as.character(unique(group_data$conc_num)),
|
||||||
ylim_vals = y_limits,
|
ylim_vals = y_limits,
|
||||||
|
y_filter = FALSE,
|
||||||
lm_line = list(
|
lm_line = list(
|
||||||
intercept = lm_intercept_value,
|
intercept = lm_intercept_value,
|
||||||
slope = lm_slope_value
|
slope = lm_slope_value
|
||||||
@@ -1010,15 +1019,10 @@ generate_interaction_plot_configs <- function(df, type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Calculate dynamic grid layout
|
|
||||||
grid_ncol <- 4
|
|
||||||
num_plots <- length(delta_plot_configs)
|
|
||||||
grid_nrow <- ceiling(num_plots / grid_ncol)
|
|
||||||
|
|
||||||
return(list(
|
return(list(
|
||||||
list(grid_layout = list(ncol = 2, nrow = 2), plots = stats_plot_configs),
|
list(grid_layout = list(ncol = 2), plots = stats_plot_configs), # nrow will be calculated dynamically
|
||||||
list(grid_layout = list(ncol = 2, nrow = 2), plots = stats_boxplot_configs),
|
list(grid_layout = list(ncol = 2), plots = stats_boxplot_configs), # nrow will be calculated dynamically
|
||||||
list(grid_layout = list(ncol = 4, nrow = grid_nrow), plots = delta_plot_configs)
|
list(grid_layout = list(ncol = 4), plots = delta_plot_configs) # nrow will be calculated dynamically
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1412,9 +1416,9 @@ main <- function() {
|
|||||||
plot_configs = delta_bg_outside_2sd_k_plot_configs)
|
plot_configs = delta_bg_outside_2sd_k_plot_configs)
|
||||||
)
|
)
|
||||||
|
|
||||||
furrr::future_map(plot_configs, function(config) {
|
# furrr::future_map(plot_configs, function(config) {
|
||||||
generate_and_save_plots(config$out_dir, config$filename, config$plot_configs)
|
# generate_and_save_plots(config$out_dir, config$filename, config$plot_configs)
|
||||||
}, .options = furrr_options(seed = TRUE))
|
# }, .options = furrr_options(seed = TRUE))
|
||||||
|
|
||||||
bg_strains <- c("YDL227C")
|
bg_strains <- c("YDL227C")
|
||||||
lapply(bg_strains, function(strain) {
|
lapply(bg_strains, function(strain) {
|
||||||
|
|||||||
Reference in New Issue
Block a user