如何在ggplot2折线图中设置离散X轴且保留折线
解决ggplot2离散X轴与折线图共存问题
你遇到的折线消失问题,本质是将genes_included转为因子后,ggplot无法自动识别正确的分组来连接折线。以下两种方法都能实现需求:
方法一:保留因子型X轴,显式指定分组
转换x轴为因子后,在aes中添加group = interaction(variation, purity),强制ggplot按variation和purity的组合分组绘制折线:
# 转换x轴为因子 corrtable <- data.frame( genes_included = factor(c(rep(100,4),rep(1000,4),rep(5000,4),rep(10000,4))), percent_map_to_origin = runif(16), variation = rep(c("TCGA", "TCGA", "GTEx", "GTEx"),4), purity = rep(c("Included", "Excluded"),8) ) library(ggplot2) ggplot(corrtable, aes(x = genes_included, y = percent_map_to_origin, color = variation, linetype = purity, group = interaction(variation, purity))) + geom_line() + geom_point() + geom_hline(yintercept=0.99554361, color="darkslategray") + labs(x = "Number of Genes Included", y = "% of Cell Lines That Correlate Highest to Origin Tissue") + theme(text = element_text(face = "bold"), legend.text = element_text(size = 16), legend.title = element_text(size = 18), axis.title = element_text(size = 12), axis.text = element_text(size = 13)) + scale_linetype_manual(values=c("dashed", "solid"))
方法二:保留连续X轴,自定义刻度实现离散显示
如果不想修改原始数据类型,直接通过scale_x_continuous设置刻度断点和标签,同样能达到仅显示指定X轴值的效果:
# 保留原始数据(x为数值型) corrtable <- data.frame( genes_included = c(rep(100,4),rep(1000,4),rep(5000,4),rep(10000,4)), percent_map_to_origin = runif(16), variation = rep(c("TCGA", "TCGA", "GTEx", "GTEx"),4), purity = rep(c("Included", "Excluded"),8) ) library(ggplot2) ggplot(corrtable, aes(x = genes_included, y = percent_map_to_origin, color = variation, linetype = purity)) + geom_line() + geom_point() + geom_hline(yintercept=0.99554361, color="darkslategray") + labs(x = "Number of Genes Included", y = "% of Cell Lines That Correlate Highest to Origin Tissue") + theme(text = element_text(face = "bold"), legend.text = element_text(size = 16), legend.title = element_text(size = 18), axis.title = element_text(size = 12), axis.text = element_text(size = 13)) + scale_linetype_manual(values=c("dashed", "solid")) + scale_x_continuous(breaks = c(100, 1000, 5000, 10000), # 指定显示的刻度 labels = c("100", "1000", "5000", "10000")) # 刻度标签
两种方法都能实现需求:方法一真正将X轴转为离散型,方法二更适合需要保留数值型X轴属性的场景。
内容的提问来源于stack exchange,提问作者avery
相关产品推荐
相关产品推荐

