簡體   English   中英

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值繪制(例如,“ dw.05.art.rel.ch”為5)。 隨附的是我在excel中制作的示例。 我被困在如何創建X值以及如何生成多個圖上。 在此處輸入圖片說明

您也可以使用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()

這是圖形的樣子:

在此處輸入圖片說明

在此處輸入圖片說明

您還可以為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)

您的情況非常簡單,因為列名是常規的。 假設您的數據幀稱為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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM