簡體   English   中英

如何使用R ggplot繪制多條曲線並將其着色為組

[英]How to plot multiple curves and color them as group using R ggplot

我有一個這樣的數據框。

      ID     read1     read2     read3     read4 class
1     5820350 0.3791915 0.3747022 0.3729779 0.3724259     1
2     5820364 0.3758676 0.3711775 0.3695976 0.3693112     2
3     5820378 0.3885081 0.3823900 0.3804273 0.3797707     2
4     5820392 0.3779945 0.3729582 0.3714910 0.3709072     1
5     5820425 0.2954782 0.2971604 0.2973882 0.2973216     3
6     5820426 0.3376101 0.3368173 0.3360203 0.3359517     3

每行代表一個帶有四個值的樣本,最后一列是該樣本的分類。 我想可視化每個樣本曲線並將類設置為顏色。 我試圖重塑數據框,但隨后失去了所需的類功能。 您能否給我一些提示或向我展示如何在R中做到這一點?

提前致謝。

您將要首先整理數據(如下面的tidyr::gather )。 然后,在繪制時,您將要設置group = IDcolor = factor(class) (對於離散顏色):

library(tidyr)
library(ggplot2)

df <- structure(list(ID = c(5820350L, 5820364L, 5820378L, 5820392L, 5820425L, 5820426L), 
                 read1 = c(0.3791915, 0.3758676, 0.3885081, 0.3779945, 0.2954782, 0.3376101), 
                 read2 = c(0.3747022, 0.3711775, 0.38239, 0.3729582, 0.2971604, 0.3368173), 
                 read3 = c(0.3729779, 0.3695976, 0.3804273, 0.371491, 0.2973882, 0.3360203),
                 read4 = c(0.3724259, 0.3693112, 0.3797707, 0.3709072, 0.2973216, 0.3359517), 
                 class = c(1L, 2L, 2L, 1L, 3L, 3L)), 
            .Names = c("ID", "read1", "read2", "read3", "read4", "class"), 
            class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))

df <- gather(df, reading, value, -c(ID, class))

ggplot(df, aes(x = reading, y = value, color = factor(class))) +
  geom_line(aes(group = ID))

在此處輸入圖片說明

這是一個可以執行您想要的功能的函數:

PlotMultiCurve = function(x, classes, cols = NULL, colSet = "Set1", ...) {

  if(!is.factor(classes)) classes = as.factor(classes)
  nClasses = length(levels(classes))

  if(is.null(cols)) cols = brewer.pal(nClasses, colSet)

  plot(1:ncol(x), x[1,], col = cols[classes[1]], type = "l", 
       ylim = range(x), xaxt = "n", ...)
  axis(1, 1:ncol(x), 1:ncol(x))
  for(i in 2:nrow(x)) {
    par(new = T)
    plot(1:ncol(x), x[i,], col = cols[classes[i]], type = "l", 
         ylim = range(x), axes = F, xlab = "", ylab = "")

  }
}

除非您提供顏色,否則它將自動使用RColorBrewer軟件包中的顏色選擇。 我將您的數據直接復制到一個文本文件中,然后運行以下命令:

# Prepare data
require(RColorBrewer)
myData = read.table("Data.2016-05-03.txt")
x = myData[,2:5]
classes = as.factor(myData$class)

# Plot into PNG file[![enter image description here][1]][1]
png("Plot.2016-05-03.png", width = 1000, height = 1000, res = 300)
par(cex = 0.8)
PlotMultiCurve(x = x, classes = classes, xlab = "Read", ylab = "Response")
dev.off()

例

暫無
暫無

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

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