Begin debugging
This commit is contained in:
@@ -338,17 +338,13 @@ generate_and_save_plots <- function(output_dir, file_name, plot_configs, grid_la
|
||||
|
||||
`%||%` <- function(a, b) if (!is.null(a)) a else b
|
||||
|
||||
# Generalized plot generation
|
||||
plots <- lapply(plot_configs, function(config) {
|
||||
|
||||
df <- config$df
|
||||
plot <- ggplot(df, aes(x = !!sym(config$x_var), y = !!sym(config$y_var), color = as.factor(!!sym(config$color_var))))
|
||||
|
||||
# Rank plots with SD annotations
|
||||
# Handle plot types like "rank", "correlation", and default scatter/box/density
|
||||
if (config$plot_type == "rank") {
|
||||
plot <- plot + geom_point(size = 0.1, shape = 3)
|
||||
|
||||
# Adding SD bands
|
||||
if (!is.null(config$sd_band)) {
|
||||
for (i in seq_len(config$sd_band)) {
|
||||
plot <- plot +
|
||||
@@ -357,111 +353,61 @@ generate_and_save_plots <- function(output_dir, file_name, plot_configs, grid_la
|
||||
geom_hline(yintercept = c(-i, i), color = "gray")
|
||||
}
|
||||
}
|
||||
|
||||
# Optionally add enhancer/suppressor count annotations
|
||||
if (!is.null(config$enhancer_label)) {
|
||||
plot <- plot + annotate("text", x = config$enhancer_label$x,
|
||||
y = config$enhancer_label$y, label = config$enhancer_label$label) +
|
||||
annotate("text", x = config$suppressor_label$x,
|
||||
y = config$suppressor_label$y, label = config$suppressor_label$label)
|
||||
plot <- plot + annotate("text", x = config$enhancer_label$x, y = config$enhancer_label$y, label = config$enhancer_label$label) +
|
||||
annotate("text", x = config$suppressor_label$x, y = config$suppressor_label$y, label = config$suppressor_label$label)
|
||||
}
|
||||
}
|
||||
|
||||
# Correlation plots
|
||||
if (config$plot_type == "correlation") {
|
||||
plot <- plot + geom_point(shape = 3, color = "gray70") +
|
||||
geom_smooth(method = "lm", color = "tomato3") +
|
||||
} else if (config$plot_type == "correlation") {
|
||||
plot <- plot + geom_point(shape = 3, color = "gray70") + geom_smooth(method = "lm", color = "tomato3") +
|
||||
annotate("text", x = 0, y = 0, label = config$correlation_text)
|
||||
} else {
|
||||
plot <- plot + aes(y = !!sym(config$y_var)) +
|
||||
if (config$plot_type == "box") geom_boxplot() else
|
||||
if (config$plot_type == "density") geom_density() else
|
||||
if (config$plot_type == "bar") geom_bar(stat = "identity") else geom_point(shape = 3) + geom_smooth(method = "lm", se = FALSE)
|
||||
}
|
||||
|
||||
# General scatter/boxplot/density handling
|
||||
if (!is.null(config$y_var)) {
|
||||
plot <- plot + aes(y = !!sym(config$y_var))
|
||||
|
||||
# Add error bars for "delta_bg" or general cases
|
||||
if (config$error_bar %||% FALSE) {
|
||||
y_mean_col <- paste0("mean_", config$y_var)
|
||||
y_sd_col <- paste0("sd_", config$y_var)
|
||||
|
||||
if (config$y_var == "delta_bg" && config$plot_type == "scatter") {
|
||||
plot <- plot + geom_point(shape = 3, size = 0.2, position = "jitter") +
|
||||
geom_errorbar(aes(ymin = !!sym(y_mean_col) - !!sym(y_sd_col),
|
||||
ymax = !!sym(y_mean_col) + !!sym(y_sd_col)), width = 0.1) +
|
||||
geom_point(aes(y = !!sym(y_mean_col)), size = 0.6)
|
||||
} else if (config$error_bar %||% FALSE) {
|
||||
plot <- plot +
|
||||
geom_point(shape = 3, size = 0.2) +
|
||||
geom_errorbar(aes(ymin = !!sym(y_mean_col) - !!sym(y_sd_col),
|
||||
plot <- plot + geom_errorbar(aes(ymin = !!sym(y_mean_col) - !!sym(y_sd_col),
|
||||
ymax = !!sym(y_mean_col) + !!sym(y_sd_col)), width = 0.1) +
|
||||
geom_point(aes(y = !!sym(y_mean_col)), size = 0.6)
|
||||
}
|
||||
}
|
||||
|
||||
# Plot type selection
|
||||
plot <- switch(config$plot_type,
|
||||
"box" = plot + geom_boxplot(),
|
||||
"density" = plot + geom_density(),
|
||||
"bar" = plot + geom_bar(stat = "identity"),
|
||||
plot + geom_point() + geom_smooth(method = "lm", se = FALSE))
|
||||
|
||||
# Adding y-limits if provided
|
||||
# Apply y-limits if provided
|
||||
if (!is.null(config$ylim_vals)) {
|
||||
plot <- plot + coord_cartesian(ylim = config$ylim_vals)
|
||||
}
|
||||
|
||||
# Setting legend position, titles, and labels
|
||||
legend_position <- config$legend_position %||% "bottom"
|
||||
plot <- plot + ggtitle(config$title) + theme_publication(legend_position = legend_position)
|
||||
# Apply labels, titles, and legends
|
||||
plot <- plot + ggtitle(config$title) + theme_publication(legend_position = config$legend_position %||% "bottom") +
|
||||
if (!is.null(config$x_label)) xlab(config$x_label) else NULL +
|
||||
if (!is.null(config$y_label)) ylab(config$y_label) else NULL
|
||||
|
||||
if (!is.null(config$x_label)) plot <- plot + xlab(config$x_label)
|
||||
if (!is.null(config$y_label)) plot <- plot + ylab(config$y_label)
|
||||
|
||||
# Adding text annotations if provided
|
||||
# Add annotations if available
|
||||
if (!is.null(config$annotations)) {
|
||||
for (annotation in config$annotations) {
|
||||
plot <- plot + annotate("text", x = annotation$x, y = annotation$y, label = annotation$label)
|
||||
}
|
||||
plot <- plot + geom_text(aes(x = config$annotations$x, y = config$annotations$y, label = config$annotations$label))
|
||||
}
|
||||
|
||||
return(plot)
|
||||
})
|
||||
|
||||
# If grid_layout is provided, arrange plots in a grid and save in a single PDF
|
||||
if (!is.null(grid_layout)) {
|
||||
pdf(file.path(output_dir, paste0(file_name, ".pdf")), width = 14, height = 9)
|
||||
|
||||
# Loop through plots in chunks defined by ncol and nrow
|
||||
for (start_idx in seq(1, length(plots), by = grid_layout$ncol * grid_layout$nrow)) {
|
||||
end_idx <- min(start_idx + grid_layout$ncol * grid_layout$nrow - 1, length(plots))
|
||||
plot_subset <- plots[start_idx:end_idx]
|
||||
|
||||
# Arrange plots in a grid
|
||||
do.call(grid.arrange, c(plot_subset, ncol = grid_layout$ncol, nrow = grid_layout$nrow))
|
||||
}
|
||||
|
||||
dev.off()
|
||||
|
||||
plotly_plots <- lapply(plots, function(plot) {
|
||||
suppressWarnings(ggplotly(plot) %>% layout(legend = list(orientation = "h")))
|
||||
})
|
||||
combined_plot <- subplot(plotly_plots, nrows = grid_layout$nrow, margin = 0.05)
|
||||
saveWidget(combined_plot, file = file.path(output_dir, paste0(file_name, ".html")), selfcontained = TRUE)
|
||||
|
||||
} else {
|
||||
# Save individual plots to PDF
|
||||
# Save the plots
|
||||
pdf(file.path(output_dir, paste0(file_name, ".pdf")), width = 14, height = 9)
|
||||
lapply(plots, print)
|
||||
dev.off()
|
||||
|
||||
# Convert plots to plotly and save as HTML
|
||||
plotly_plots <- lapply(plots, function(plot) {
|
||||
suppressWarnings(ggplotly(plot) %>% layout(legend = list(orientation = "h")))
|
||||
})
|
||||
combined_plot <- subplot(plotly_plots, nrows = length(plotly_plots), margin = 0.05)
|
||||
plotly_plots <- lapply(plots, function(plot) suppressWarnings(ggplotly(plot) %>% layout(legend = list(orientation = "h"))))
|
||||
|
||||
# Handle grid layout
|
||||
combined_plot <- subplot(plotly_plots, nrows = grid_layout$nrow %||% length(plots), margin = 0.05)
|
||||
saveWidget(combined_plot, file = file.path(output_dir, paste0(file_name, ".html")), selfcontained = TRUE)
|
||||
}
|
||||
}
|
||||
|
||||
generate_interaction_plot_configs <- function(df, variables) {
|
||||
plot_configs <- list()
|
||||
configs <- list()
|
||||
|
||||
for (variable in variables) {
|
||||
# Define the y-limits based on the variable being plotted
|
||||
@@ -493,7 +439,7 @@ generate_interaction_plot_configs <- function(df, variables) {
|
||||
)
|
||||
|
||||
# Add scatter plot configuration for this variable
|
||||
plot_configs[[length(plot_configs) + 1]] <- list(
|
||||
configs[[length(configs) + 1]] <- list(
|
||||
df = df,
|
||||
x_var = "conc_num_factor",
|
||||
y_var = delta_var,
|
||||
@@ -511,7 +457,7 @@ generate_interaction_plot_configs <- function(df, variables) {
|
||||
)
|
||||
|
||||
# Add box plot configuration for this variable
|
||||
plot_configs[[length(plot_configs) + 1]] <- list(
|
||||
configs[[length(configs) + 1]] <- list(
|
||||
df = df,
|
||||
x_var = "conc_num_factor",
|
||||
y_var = variable,
|
||||
@@ -526,7 +472,7 @@ generate_interaction_plot_configs <- function(df, variables) {
|
||||
)
|
||||
}
|
||||
|
||||
return(plot_configs)
|
||||
return(configs)
|
||||
}
|
||||
|
||||
# Adjust missing values and calculate ranks
|
||||
@@ -568,6 +514,8 @@ generate_rank_plot_configs <- function(df, rank_var, zscore_var, var, is_lm = FA
|
||||
label = paste("Deletion Suppressors =", nrow(df[df[[zscore_var]] <= -sd_band, ]))
|
||||
)
|
||||
)
|
||||
|
||||
return(configs)
|
||||
}
|
||||
|
||||
# Non-annotated version (_notext)
|
||||
@@ -588,14 +536,14 @@ generate_rank_plot_configs <- function(df, rank_var, zscore_var, var, is_lm = FA
|
||||
}
|
||||
|
||||
generate_correlation_plot_configs <- function(df, variables) {
|
||||
plot_configs <- list()
|
||||
configs <- list()
|
||||
|
||||
for (variable in variables) {
|
||||
z_lm_var <- paste0("Z_lm_", variable)
|
||||
avg_zscore_var <- paste0("Avg_Zscore_", variable)
|
||||
lm_r_squared_col <- paste0("lm_R_squared_", variable)
|
||||
|
||||
plot_configs[[length(plot_configs) + 1]] <- list(
|
||||
configs[[length(configs) + 1]] <- list(
|
||||
df = df,
|
||||
x_var = avg_zscore_var,
|
||||
y_var = z_lm_var,
|
||||
@@ -607,7 +555,7 @@ generate_correlation_plot_configs <- function(df, variables) {
|
||||
)
|
||||
}
|
||||
|
||||
return(plot_configs)
|
||||
return(configs)
|
||||
}
|
||||
|
||||
main <- function() {
|
||||
@@ -647,21 +595,22 @@ main <- function() {
|
||||
df_na_stats <- ss$df_with_stats
|
||||
write.csv(summary_stats, file = file.path(out_dir, "SummaryStats_ALLSTRAINS.csv"), row.names = FALSE)
|
||||
|
||||
print("Summary stats:")
|
||||
print(head(summary_stats), width = 200)
|
||||
# print("Summary stats:")
|
||||
# print(head(summary_stats), width = 200)
|
||||
|
||||
# Remove rows with 0 values in L
|
||||
df_no_zeros <- df_na %>% filter(L > 0)
|
||||
|
||||
# Additional filtering for non-finite values
|
||||
# Filter and print non-finite rows, then filter and keep only finite rows
|
||||
df_na_filtered <- df_na %>%
|
||||
filter(if_any(c(L), ~ !is.finite(.))) %>%
|
||||
{
|
||||
if (nrow(.) > 0) {
|
||||
non_finite_rows <- filter(., if_any(c(L), ~ !is.finite(.)))
|
||||
if (nrow(non_finite_rows) > 0) {
|
||||
message("Removing non-finite rows:\n")
|
||||
print(head(., n = 10))
|
||||
print(head(non_finite_rows, n = 10))
|
||||
}
|
||||
df_na %>% filter(if_all(c(L), is.finite))
|
||||
filter(., if_all(c(L), is.finite))
|
||||
}
|
||||
|
||||
# Filter data within and outside 2SD
|
||||
@@ -871,11 +820,11 @@ main <- function() {
|
||||
# Calculate interactions
|
||||
variables <- c("L", "K", "r", "AUC")
|
||||
message("Calculating interaction scores")
|
||||
print("Reference strain:")
|
||||
print(head(reference_strain))
|
||||
# print("Reference strain:")
|
||||
# print(head(reference_strain))
|
||||
reference_results <- calculate_interaction_scores(reference_strain, max_conc, variables)
|
||||
print("Deletion strains:")
|
||||
print(head(deletion_strains))
|
||||
# print("Deletion strains:")
|
||||
# print(head(deletion_strains))
|
||||
deletion_results <- calculate_interaction_scores(deletion_strains, max_conc, variables)
|
||||
|
||||
zscores_calculations_reference <- reference_results$calculations
|
||||
@@ -952,7 +901,7 @@ main <- function() {
|
||||
generate_rank_plot_configs(zscores_interactions_adjusted, "Rank_K", "Avg_Zscore_K", "K")
|
||||
)
|
||||
generate_and_save_plots(output_dir = out_dir, file_name = "RankPlots",
|
||||
plot_configs = rank_plot_config, grid_layout = list(ncol = 3, nrow = 2))
|
||||
plot_configs = rank_plot_configs, grid_layout = list(ncol = 3, nrow = 2))
|
||||
|
||||
rank_lm_plot_config <- c(
|
||||
generate_rank_plot_configs(zscores_interactions_adjusted, "Rank_lm_L", "Z_lm_L", "L", is_lm = TRUE),
|
||||
|
||||
Reference in New Issue
Block a user