我有这种格式的数据框:
row.names 100 50 25 0
metabolite1 113417.2998 62594.7067 39460.7705 1.223243e+02
metabolite2 3494058.7972 2046871.7446 1261278.2476 6.422864e+03
色谱柱是指质量控制的浓度(%):100,50,25,0。
目前为了绘制单个图表,我将数据提取到一个新的数据框中并将其绘制成如下:
metabolite1 <- data.frame(Numbers = c(100,50,25,0), Signal = c(113417.2998,62594.7067,39460.7705,122.3243))
# Extract coefficient of variance for line of best fit
Coef <- coef(lm(Signal ~ Numbers, data = metabolite1))
# plot data
ggplot(metabolite1, aes(x = Numbers, y = Signal)) +
geom_point() +
xlim(0,100) +
geom_abline(intercept = Coef[1], slope = Coef[2])
这是非常低效的,我试图找到一种更好的方法来为每一行绘制单独的散点图,而不是创建单独的数据帧。什么是更好的方法来做到这一点?我需要160个代谢物来生成图表。我试图将数据框融合为以下格式:
Name variable value
metabolite1 100 113417.2998
metabolite2 100 3494058.7972
metabolite1 50 62594.7067
metabolite2 50 2046871.7446
metabolite1 25 39460.7705
metabolite2 25 1261278.2476
metabolite1 0 1.223243e+02
metabolite2 0 6.422864e+03
然后使用ggplot和faceting绘制数据
ggplot(data = df, aes(x = variable, y = value)) +
geom_point() + facet_grid(~ Name)
但所生成的图都具有相同的y轴刻度,这与我正在使用的数据不相适应。我因此而假设我不能使用刻面来制作情节。
编辑:我不知道如何在不使用geom_smooth的情况下为每个地块添加最佳拟合线,我不想这样做。
答案 0 :(得分:1)
你的融合和刻面方法正在走上正轨:
ggplot(data = df, aes(x = variable, y = value)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, lwd = .5, col = "black") +
facet_wrap(~ Name, scales = "free_y")
这会产生与在子集上运行ggplot
时得到的相似的图:
out <- lapply(list(metabolite1, metabolite2), function(d) {
Coef <- coef(lm(Signal ~ Numbers, data = d))
# plot data
p <- ggplot(d, aes(x = Numbers, y = Signal)) +
geom_point() +
xlim(0,100) +
geom_abline(intercept = Coef[1], slope = Coef[2])
})
gridExtra::grid.arrange(out[[1]], out[[2]], nrow = 1)