如何反转ggplot2折线图绘制顺序避免底层线条被遮盖
解决ggplot2折线图绘制顺序反转问题
你可以通过两种方法反转线条的绘制顺序,让Sim值较小的蓝色线条显示在红色线条之上:
方法一:在aes中指定绘制顺序
直接在ggplot的美学映射里添加order = desc(Sim),让Sim值大的线条先绘制,小的后绘制:
library(ggplot2) dp_no_sim_comparison_internal <- read.table("/home/agalvez/data/sims/final_output/internal_nodes/internal_dollop_final_output.csv", sep = "\t", header=TRUE) dp_no_sim_comparison_internal$Node <- as.factor(dp_no_sim_comparison_internal$Node) lineplot6 <- ggplot(dp_no_sim_comparison_internal, aes(x = Node, y = Present, group = Sim, colour = Sim, order = desc(Sim))) + geom_line(alpha=0.1) + xlab("Node ID") + ylab("Gene count") + ggtitle("Dollop") + labs(colour='Simulation') + theme_minimal() + theme(axis.text.x = element_blank()) + theme(plot.title = element_text(face = "bold")) + scale_color_gradient(low = "darkturquoise", high = "brown2") lineplot6
方法二:反转数据框的行顺序
ggplot默认按照数据框的行顺序绘制图层,把数据按Sim降序排列,让大Sim值的记录排在前面:
library(ggplot2) dp_no_sim_comparison_internal <- read.table("/home/agalvez/data/sims/final_output/internal_nodes/internal_dollop_final_output.csv", sep = "\t", header=TRUE) dp_no_sim_comparison_internal$Node <- as.factor(dp_no_sim_comparison_internal$Node) # 按Sim降序排序数据 dp_no_sim_comparison_internal <- dp_no_sim_comparison_internal[order(-dp_no_sim_comparison_internal$Sim), ] lineplot6 <- ggplot(dp_no_sim_comparison_internal, aes(x = Node, y = Present, group = Sim, colour = Sim)) + geom_line(alpha=0.1) + xlab("Node ID") + ylab("Gene count") + ggtitle("Dollop") + labs(colour='Simulation') + theme_minimal() + theme(axis.text.x = element_blank()) + theme(plot.title = element_text(face = "bold")) + scale_color_gradient(low = "darkturquoise", high = "brown2") lineplot6
原理说明
ggplot的图层绘制遵循"先画的在底层,后画的在顶层"的规则,以上两种方法都是让Sim值较大的红色线条先绘制(底层),Sim值较小的蓝色线条后绘制(顶层),从而避免蓝色线条被遮盖。
内容的提问来源于stack exchange,提问作者Alex galvez morante
相关产品推荐
相关产品推荐

