在R中绘制多条迹线

时间:2016-11-05 14:11:41

标签: r ggplot2

我开始学习R用于数据分析,最重要的是,用于数据可视化。

由于我仍处于切换过程中,我正在尝试重现我在R中使用Graphpad Prism或Origin Pro所做的活动。在大多数情况下,一切都很顺利,但我找不到用于绘图的智能解决方案单个图中的多个y列。

我通常从用于数据可视化的软件中得到的结果如下:

enter image description here

每一条黑色迹线都是一个测量值,我想在R中获得相同的图形。在Prism或Origin中,这将在XY图形中进行单个复制粘贴。

我导出了数据矩阵(一个X表示时间,多个Y值,这是您在图像中看到的痕迹)。

我使用以下命令在R中导入了数据:

library(ggplot2) #loaded ggplot2

Data <- read.csv("Directory/File.txt", header=F, sep="") #imported data
DF <- data.frame(Data) #transformed data into data frame

如果我现在绘制数据,我会获得一系列列,其中第一列(称为V1)是X轴,而所有其他列(V2到V140)是我想要放在同一图表上的痕迹。

为了绘制数据,我尝试了不同的解决方案:

ggplot(data=DF, aes(x=DF$V1, y=DF[V2:V140]))+geom_line()+theme_bw() #did not work

plot(DF, xy.coords(x=DF$V1, y=DF$V2:V140)) #gives me an error

plot(DF, xy.coords(x=V1, y=c(V2:V10))) #gives me an error

我按照EZH指南尝试了matplot,但没有成功:

我使用的代码如下:matplot(x=DF$V1, type="l", lty = 2:100)

我找到的唯一解决方案是为每个单独的列单独绘制命令,但这是一个疯狂的解决方案。列数因我的数据而异,手动输入140列的命令是疯了。

你会建议什么?

提前谢谢。

此处还附有一些数据。Data: single X, multiple Y

3 个答案:

答案 0 :(得分:1)

我尝试使用matplot()。我使用了一个没有趋势的非常样本数据。所以我的代码输出看起来很糟糕,但我主要关注的是代码。既然你已经尝试了matplot(),那么只要你做得对,就重新检查下面的解决方案吧!

set.seed(100)
df = matrix(sample(1:685765,50000,replace = T),ncol = 100)
colnames(df)=c("x",paste0("y", 1:99))
dt=as.data.frame(df)
matplot(dt[["x"]], y = dt[,c(paste0("y",1:99))], type = "l")

答案 1 :(得分:0)

如果你想在基础R中进行绘图,你必须制作一个图并一次添加一行,但这并不难。

我们首先制作一些样本数据。由于链接中的数据似乎都在相同的比例上,我假设您的数据框只有y个值,而x值是分开存储的。

plotData <- as.data.frame(matrix(sort(rnorm(500)),ncol = 5))
xval <- sort(sample(200, 100))

现在我们可以用第一列初始化一个图。

plot(xval, plotData[[1]], type = "l", 
     ylim = c(min(plotData), max(plotData)))
  • type = "l"制作线条图而不是散点图
  • ylim = c(min(plotData), max(plotData))确保y轴适合所有数据。

现在我们可以添加其余的值。

apply(plotData[-1], 2, lines, x = xval)

  • plotData[-1]删除我们已经绘制的列
  • apply函数2作为第二个参数意味着我们想要在每一列上执行一个函数,
  • lines定义了我们apply列的功能。 lines在当前情节中添加了一个新行。
  • x = xval将额外参数(x)传递给lines函数。

Resulting plot

答案 2 :(得分:0)

如果您使用ggplot2绘制数据,则应将数据转换为长格式;

library(ggplot2)
library(reshape2)

dat <- read.delim('AP.txt', header = F)

# plotting only first 9 traces
# my rstudio will crach if I plot the full data;
df <- melt(dat[1:10], id.vars = 'V1')

ggplot(df, aes(x = V1, y = value, color = variable)) + geom_line()

# if you want all traces to be in same colour, you can use
ggplot(df, aes(x = V1, y = value, group = variable)) + geom_line()