R语言 使用多个独立的x和y列从CSV绘制色谱图

ruyhziif  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在创建多个图的叠加。每个图有2列(总共4个图),所有x值都使用相同的单位,所有y值都使用相同的单位。我不确定我的csv格式是否正确,以便R可以独立地叠加每组mL和mAU值,或者是否需要以某种方式读取。
我的表的例子,但它是8列而不是2列
| 毫升|毫金|
| --------------|--------------|
| 瓦尔|瓦尔|
| 瓦尔|瓦尔|
image of my csv
下面是输出的csv数据:

dput(head(chrom))
structure(list(Chrom.1 = c("UV 1_295", "ml", "0", "0.002", "0.005", 
"0.007"), X = c("", "mAU", "0.06199001", "0.0617022", "0.06154499", 
"0.06143872"), Chrom.1.1 = c("UV 1_295 (1)", "ml", "0", "0.003", 
"0.005", "0.007"), X.1 = c("", "mAU", "0.04090555", "0.04144096", 
"0.0419024", "0.04236258"), Chrom.1.2 = c("UV 1_295 (2)", "ml", 
"0.002", "0.004", "0.006", "0.008"), X.2 = c("", "mAU", "0.02393208", 
"0.02436912", "0.02512711", "0.02582231"), Chrom.1.3 = c("UV 1_295 (3)", 
"ml", "0.001", "0.003", "0.006", "0.008"), X.3 = c("", "mAU", 
"0.0300992", "0.02977365", "0.02929245", "0.02880815")), row.names = c(NA, 
6L), class = "data.frame")

我有一个juryrigged版本设置从我读到的其他职位,但它是图形的x值(毫升)作为自己的线,我不想要的。
以下是我到目前为止的情节:

library(readxl)
library(ggplot2)
library(reshape2)

chrom <- read.csv(file = 'Linear Gradient Composite.csv', skip = 2)
colnames(chrom) <- c("mL", "mAU", "mL1","mAU1","mL2", "mAU2", "mL3","mAU3")
chromMelt <- melt(chrom, "mL")
ggplot(chromMelt, aes(mL, value, color = variable)) + geom_line()

使用答案代码更正图:

5hcedyr0

5hcedyr01#

正如你已经猜到的,你的数据没有正确的形状来实现你想要的结果。但这可以通过首先一致地重命名列来解决,即第一对列从1开始,并通过添加例如_作为分隔符来使整形更容易。然后你可以使用tidyr::pivot_longer来整形数据并创建你的图:

library(ggplot2)
library(tidyr)
library(dplyr, warn=FALSE)

# Skip first two rows
chrom <- chrom[-c(1:2),]

colnames(chrom) <- paste(rep(c("mL", "mAU"), 4), rep(1:4, each = 2), sep = "_")

chrom
#>    mL_1      mAU_1  mL_2      mAU_2  mL_3      mAU_3  mL_4      mAU_4
#> 3     0 0.06199001     0 0.04090555 0.002 0.02393208 0.001  0.0300992
#> 4 0.002  0.0617022 0.003 0.04144096 0.004 0.02436912 0.003 0.02977365
#> 5 0.005 0.06154499 0.005  0.0419024 0.006 0.02512711 0.006 0.02929245
#> 6 0.007 0.06143872 0.007 0.04236258 0.008 0.02582231 0.008 0.02880815

chromMelt <- chrom |> 
  pivot_longer(everything(), names_to = c(".value", "id"), names_sep = "_") |> 
  mutate(across(-id, as.numeric))

ggplot(chromMelt, aes(mL, mAU, color = id)) + 
  geom_line()

相关问题