R - 如何从数据框创建多个散点图

R - How to create multiple scatterplots from dataframe

我下面有一个数据框

     dw.05.art.rel.ch dw.10.art.rel.ch dw.15.art.rel.ch dw.20.art.rel.ch dw.25.art.rel.ch dw.30.art.rel.ch dw.35.art.rel.ch dw.40.art.rel.ch
0.25       2.14751794        1.3573794         1.378441        1.0225707         1.250907        1.3704892         1.018457        1.1266434
0.5        0.06980416        1.5074681         1.618793        1.3340371         1.153321        1.1491761         1.015098        1.0486423
0.75      -0.53753859        0.5501804         1.215985        1.1780073         1.276440        1.1058739         1.128350        0.9961578
1.00      -0.28508794        0.4966175         1.049642        0.9306377         1.008549        0.9741328         1.037897        0.9515636
     dw.45.art.rel.ch dw.50.art.rel.ch
0.25        1.0668396        1.0484025
0.5         1.0080182        1.0074631
0.75        0.9927887        0.9398075
1.00        0.9711958        1.0396354

我想从单个数据帧创建多个散点图。每行中的值(例如 0.25)是 Y 值,并根据 X 值绘制,X 值是列名称中的数字(例如,"dw.05.art.rel.ch" 是 5)。附上我在excel做的例子。我坚持如何创建 X 值以及如何生成多个图。

您的情况非常简单,因为列名是常规的。假设您的数据框称为 df:

for (i in 1:dim(df)[1]){
  plot(as.numeric(substr(names(df), 4, 5)),df[i,])
}

这将使所有绘图具有基本格式。

或者

matplot(seq(ncol(df)) * 5, t(df), type = 'l')

或者

plot(c(5, 40), c(0, max(df)), type = 'n')
for (ii in 1:nrow(df))
  lines(seq(ncol(df)) * 5, unlist(df[ii, ]), col = ii)

数据

df <- read.table(header = TRUE, text = "dw.05.art.rel.ch dw.10.art.rel.ch dw.15.art.rel.ch dw.20.art.rel.ch dw.25.art.rel.ch dw.30.art.rel.ch dw.35.art.rel.ch dw.40.art.rel.ch
0.25       2.14751794        1.3573794         1.378441        1.0225707         1.250907        1.3704892         1.018457        1.1266434
0.5        0.06980416        1.5074681         1.618793        1.3340371         1.153321        1.1491761         1.015098        1.0486423
0.75      -0.53753859        0.5501804         1.215985        1.1780073         1.276440        1.1058739         1.128350        0.9961578
1.00      -0.28508794        0.4966175         1.049642        0.9306377         1.008549        0.9741328         1.037897        0.9515636")

您也可以使用ggplot2。首先,让我们 "melt" 从宽格式到长格式的数据,并从列名中提取 x 值。假设您的数据框名为 dat:

library(dplyr)
library(reshape2)
library(ggplot2)

dat.m = dat %>% 
    add_rownames("group") %>%
    melt(id.var="group") %>%
    mutate(x = as.numeric(substr(variable, 4,5)))

单个图表上的所有线:

ggplot(dat.m, aes(x, value, colour=group)) +
  geom_point() +
  geom_line() +
  theme_bw()

多个面板:

ggplot(dat.m, aes(x, value)) +
  facet_grid(. ~ group) +
  geom_point() +
  geom_line() +
  theme_bw()

图表如下所示:

您还可以为 group 的每个值创建一个单独的图表:下面的代码将在名为 [=18= 的列表中保存所有图表(group 的每个值一个) ].您可以将它们打印到控制台,将它们另存为pdf文件等

pl = sapply(sort(unique(dat.m$group)), function(i) {
  ggplot(dat.m[dat.m$group==i, ], aes(x, value)) +
    facet_wrap(~ group) +
    geom_point() +
    geom_line() +
    theme_bw()
}, simplify=FALSE)