如何移除ggplot2中scale_colour_gradientn图例的百分比刻度并自定义
你设置breaks后图例消失的核心原因是:你映射到颜色维度的变量是-Adj.P.Value,取值范围在~[-1, 0]区间,而你之前填写的breaks全部是0~1的正数,完全不在变量的值域范围内,ggplot无法识别有效刻度,因此直接隐藏了颜色图例。
修正后的完整代码
library(ggplot2) # 示例数据集 df <- structure(list(Mean.Count = c(30404.8407153174, 15689.4221807262, 30404.8407153174, 15689.4221807262), Log2FC = c(-0.00357013689574257, -0.00417251481039714, 0.306809506669248, 0.224653107007472), Adj.P.Value = c(0.988865360408676, 0.981816989495127, 0.00202882891738576, 2.72576774009609e-05), TimeKD = c("A", "A", "B", "B"), Gene = c("HSPA5", "MYH9", "HSPA5", "MYH9")), row.names = c("HSPA5", "MYH9", "HSPA51", "MYH91"), class = "data.frame") # 绘图代码 ggplot(df, aes(x = Gene, y = Log2FC, group=TimeKD)) + geom_point(aes(color = -Adj.P.Value, size = Mean.Count, shape = TimeKD), alpha = 0.5)+ coord_flip() + scale_colour_gradientn( colours = grDevices::colorRampPalette(c("black", "cyan", "violet"))(n = 200), values = c(0.0, 1.0), # 适配负向值域设置breaks,即可替换默认的百分比刻度 breaks = c(-1.0, -0.1, -0.001, -0.0001, 0.0), # 可选:配置labels显示原始校正p值,可读性更强 labels = c(1.0, 0.1, 0.001, 0.0001, 0.0), space = "Lab", na.value = "grey50", guide = "colourbar", aesthetics = "colour" )+ scale_x_discrete(limits = rev)
可选优化方案
如果希望颜色映射逻辑更符合差异分析的通用展示习惯(校正p值越小,对应颜色越亮),可以将颜色映射变量改为-log10(Adj.P.Value),此时值域为正数,设置breaks时无需额外添加负号:
# 仅需修改aes的color映射和breaks设置即可 ggplot(df, aes(x = Gene, y = Log2FC, group=TimeKD)) + geom_point(aes(color = -log10(Adj.P.Value), size = Mean.Count, shape = TimeKD), alpha = 0.5)+ coord_flip() + scale_colour_gradientn( colours = grDevices::colorRampPalette(c("black", "cyan", "violet"))(n = 200), values = c(0.0, 1.0), # 此处breaks对应-log10(Adj.P.Value)的取值,数值越大代表p值越小 breaks = c(0, 1, 3, 4.5), labels = c(1, 0.1, 0.001, 0.00003), space = "Lab", na.value = "grey50", guide = "colourbar", aesthetics = "colour" )+ scale_x_discrete(limits = rev)
内容的提问来源于stack exchange,提问作者Krutik
相关产品推荐
相关产品推荐

