为什么我的输入箱线图代码不适用于我的矩阵?

Why wont my input boxplot code not work for my matrix?

我在获取数据框的绘图时遇到问题。下面附上我的示例矩阵数据框。此 class 已确认为数据帧。

Dataframe (10 rows, 59 columns originally)

我最初尝试使用 facet_grid 创建一个情节,但结果很差。 (错误:至少一层必须包含所有分面变量:x.

相反,我决定简化它并创建一个箱形图,所有内容都在一张图上。但是,我的图表如下所示: ugly graph

我的简单剧情代码如下;有谁知道为什么事情被策划得不好?任何见解都是有帮助的。这是我的第一个 post,所以我希望格式正确。

ggplot(newdf, aes(x, y, fill = x))+ geom_boxplot()

最终目标是为每个基因显示一个箱线图,其中包含每个箱子内个体的观察结果。我正在关注这个例子:example

首先,在执行示例时,您应该确保将其中的变量名称更改为您的变量名称。

ggplot(newdf, aes(x, y, fill = x))+ geom_boxplot() 中,错误可能是因为您在 newdf 中既没有 x 列也没有 y 列。 或者,即使您这样做了,它们也不是您实现目标所需要的。

最终目标是

a boxplot shown for each gene with the observations of the individuals within each box

你的 x 变量需要是一个包含基因名称的列,y 是一个包含这些基因的观察值的列。

换句话说,您需要将 data.frame 重新格式化为长格式(现在您拥有所谓的宽格式)。

有很多方法可以做到这一点,一个简单的以 R 为基数的方法是重复每列的名称乘以基因列的行数,然后将 data.frame 取消列出到值列中,就像这样:

# needed a a data.frame so made a fake one to illustrate :
newdf <- data.frame(gene1 = runif(10, ), gene2 = runif(10), gene3 = runif(10))
# this convert your data.frame from wide to long
newdf.long <- data.frame(
  gene = rep(names(newdf), each=nrow(newdf)), 
  value = unlist(newdf), 
  row.names = NULL
)

然后,您需要确保在构建 ggplot 时使用正确的变量名称:

ggplot(newdf.long, aes(x = gene, y = value, fill = gene)) + geom_boxplot()