library(ggplot2)
library(tibble)
# Create example data: one row of values with sample IDs
df <- tibble(
Sample.ID = c("a", "b", "c", "d", "e", "f"),
value = c(1, 2, 3, 4, 5, 6)
)
# Define core samples to be dispersed
core <- c("a", "b", "c")
background <- setdiff(df$Sample.ID, core)
# Compute insertion positions for dispersion
insert_pos <- round(seq(1, length(background) + 1, length.out = length(core) + 1))[-1]
# Insert core elements into the background
combined <- background
offset <- 0
for (i in seq_along(core)) {
pos <- insert_pos[i] + offset - 1
combined <- append(combined, core[i], after = pos)
offset <- offset + 1
}
# Create a new dataframe with dispersed order
df_shuffled <- df[match(combined, df$Sample.ID), ]
# Create a helper function to generate a heatmap
plot_heatmap <- function(data, title) {
ggplot(data, aes(x = factor(Sample.ID, levels = data$Sample.ID), y = 1, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = Sample.ID), color = "black") +
scale_fill_gradient(low = "#E0F3F8", high = "#FC8D59") +
theme_minimal() +
labs(title = title, x = "Sample ID", y = "") +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1))
}
# Plot original order
p1 <- plot_heatmap(df, "Original Order")
# Plot dispersed order
p2 <- plot_heatmap(df_shuffled, "Dispersed Order")
# Display both
library(patchwork)
p1 / p2
## Warning: Use of `data$Sample.ID` is discouraged.
## ℹ Use `Sample.ID` instead.
## Use of `data$Sample.ID` is discouraged.
## ℹ Use `Sample.ID` instead.
## Use of `data$Sample.ID` is discouraged.
## ℹ Use `Sample.ID` instead.
## Use of `data$Sample.ID` is discouraged.
## ℹ Use `Sample.ID` instead.
