如何用R绘制矩阵单一行数据并按元数据分组的箱线图
错误原因
你之前的代码报错是因为使用公式语法时指定了data参数为logcpm["K11040",],R会优先在这个传入的单行矩阵中查找公式里的变量,自然找不到元数据中的PEDIS列,因此运行失败。
解决方法
前提确认
首先必须保证logcpm矩阵的列顺序和元数据pd_2的样本顺序完全一一对应,如果不确定可以先执行以下代码做匹配校正:
# 按样本ID对齐顺序,避免分组错配 pd_2 <- pd_2[match(colnames(logcpm), pd_2$Sample), ]
基础R boxplot 实现
不需要指定data参数,直接传入两个等长且顺序对应的向量即可:
target_gene <- logcpm["K11040", ] boxplot(target_gene ~ pd_2$PEDIS, ylab="LogCPM", xlab="PEDIS Group")
更稳妥的写法是先合并为独立的绘图数据框,方便核对对应关系:
plot_df <- data.frame( logcpm = logcpm["K11040", ], PEDIS = pd_2$PEDIS ) boxplot(logcpm ~ PEDIS, data = plot_df, ylab="LogCPM", xlab="PEDIS Group")
ggplot2 实现(可选)
如果习惯用ggplot2绘图,代码如下:
library(ggplot2) ggplot(plot_df, aes(x = PEDIS, y = logcpm)) + geom_boxplot(fill = "lightgrey") + labs(x = "PEDIS Group", y = "LogCPM") + theme_classic()
内容的提问来源于stack exchange,提问作者mrad。
相关产品推荐
相关产品推荐

