【问题标题】:Plot each row of data frame as separate graph in R将每一行数据框绘制为 R 中的单独图形
【发布时间】:2016-09-12 12:18:50
【问题描述】:

我有一个这种格式的数据框:

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 的情况下为每个图添加最适合的单独行,我不想这样做。

【问题讨论】:

  • 您可以将facet_grid 中的scales 参数设置为free_y,以允许y 轴刻度在各个方面有所不同。
  • 我不确定如何为该方法的每个图添加最佳拟合线,因为最佳拟合线 geom_smoothlm 不同。
  • geom_smooth 有一个method 参数,您可以将其设置为lm
  • 我知道,但是当我之前测试这两种方法时,产生的最佳拟合线并不相同
  • 您可以使用library(MASS),然后尝试method="rlm" 参数(稳健的lm -> 斜率对异常值不太敏感)

标签: r ggplot2


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多