Untitled
unknown
plain_text
a year ago
2.6 kB
2
Indexable
library(ggplot2) library(scales) # Sample data df <- data.frame(names = c('MEP', 'HSC', 'Cycling', 'GMP'), NES = c(1.789621, -1.750293, -1.274638, -1.460457), number = c(230, 225, 2205, 219), p_value = c(0.000001, 0.00001, 0.00004, 0.00270)) df$p_value = -log10(df$p_value) limit = c(-max(df$p_value), max(df$p_value)) # Adjust p-value for negative NES df$p_value <- ifelse(df$NES < 0, -df$p_value, df$p_value) # Create categorical variable for the number column df$category <- cut(df$number, breaks = c(0, 200, 500, 2000, Inf), labels = c("0-200", "200-500", "500-2000", ">2000"), include.lowest = TRUE) # Define color gradient for p-value color_gradient <- c("#0077b6", "#90e0ef", "white", "#FC4A50", "#9d0208") # Create the plot p <- ggplot(df, aes(x = NES, y = reorder(names, NES))) + geom_segment(aes(xend = 0, yend = reorder(names, NES)), size = .25, color = "black") + geom_point(aes(size = category, fill = p_value), shape = 21) + # Use p_value for fill scale_fill_gradientn(colors = color_gradient, limits = limit, name = "p-value Intensity") + scale_size_manual(values = c("0-200" = 3, "200-500" = 5, "500-2000" = 7, ">2000" = 9), name = "Number Category") + geom_vline(xintercept = 0, linetype = "dashed") + geom_vline(xintercept = c(-2, -1, 1, 2), linetype = "solid", color = "grey", alpha = 0.25) + theme_minimal() + labs(x = "NES", y = "", title = "GSEA") + theme( axis.text.y = element_text(color = "black", margin = margin(t = -5)), # Adjust y-axis text spacing axis.ticks.y = element_blank(), legend.position = "right", plot.title = element_text(hjust = 0.5), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), legend.text = element_text(size = 11), # Adjust legend text size legend.box.margin = margin(10, 10, 10, 10), # Add margin around legend box plot.margin = margin(t = 10, r = 10, b = 10, l = 10) # Reduce plot margin ) + guides(size = guide_legend(override.aes = list(fill = "grey")), fill = guide_colorbar(order = 2)) + # Control legend order # Custom X axis delimiter annotate("text", x = 0, y = -0.5, label = "|", size = 10, color = "grey", vjust = 0, hjust = 0.5) + # Adjust the spacing between points and segments scale_y_discrete(expand = expansion(mult = c(0.05, 0.05))) + # Move the legend outside the plot theme( legend.margin = margin(0, 0, 0, 10) # Margin around legend ) # Print the plot print(p)
Editor is loading...
Leave a Comment