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

时间:2016-04-07 23:10:17

标签: r plot graphics dataframe scatter-plot

我有一个数据框

     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值绘制(例如,“dw.05.art.rel.ch”是5)。附件是我在excel中制作的一个例子。我坚持如何创建X值以及如何生成多个图。 enter image description here

2 个答案:

答案 0 :(得分:2)

您也可以使用ggplot2。首先,让我们融入"从宽到长格式的数据,并从列名称中提取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()

以下是图表的样子:

enter image description here

enter image description here

您还可以为group的每个值创建单独的图表:下面的代码会在名为group的列表中保存所有图表(每个值pl一个)。您可以将它们打印到控制台,将它们保存为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)

答案 1 :(得分:0)

您的情况非常简单,因为列名是常规的。假设您的数据框名为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")