【问题标题】:subset dataframe and plot all the subsets with a loop [R]子集数据框并用循环绘制所有子集 [R]
【发布时间】:2017-03-12 19:20:12
【问题描述】:

我正在使用具有 8 个有用变量的数据框,代码的想法是绘制 4 个变量(y 轴上的 3 个和一个共同的 x 轴)。数据框如下所示:

It has like 6500 rows

我想从文件列中对 data.frame 进行子集化,然后将 LogP 绘制为 x 轴,将温度、RH 和臭氧绘制为 y 轴。 我尝试在绘图函数中使用子集,但效果不佳。我将此代码用于带有原始文件之一的绘图,但不知道如何包含子集

> plot(DataOzono$LogP, DataOzono$Temperature, axes= F,type="l",col="red", ylab = NULL, xlab = 'LogP',xaxt="n",yaxt="n" )
axis(2,ylim(c(min(DataOzono$Temperature),max(DataOzono$Temperature)), layout.widths(2)))
mtext(text = 'T',line = 2,side = 2)
par(new=TRUE)
plot(DataOzono$LogP, DataOzono$RH,type="l",col="blue",xaxt="n",yaxt="n",xlab="",ylab="")
axis(4)
mtext("RH",side=4,line=2)
par(new=TRUE)
plot(DataOzono$LogP, DataOzono$Ozone,type="l",col="green",xaxt="n",yaxt="n",xlab="",ylab="")
mtext("O3",side=5,line=3)
axis(2, line = 4)

任何建议都会很有帮助。

【问题讨论】:

  • 子集是什么意思?列文件中的每个数字是否需要一个图表(包含 3 个图)?
  • 另外,你用的是windows吗?
  • 我想我没有解释自己,我想为数据框中的每个文件代码创建这些变量的图。该图表应该是三个 y 轴(每个变量一个)和一个 x 轴。是的,我正在使用 Windows

标签: r


【解决方案1】:

这是在loop 中绘制图表的方法。在您给出的示例中,我们只有一个文件编号。但是,它应该为文件列中的每个数字创建一个图表。在 Windows 上,您可以使用 savePlot 保存到您的驱动器。我简化了您的示例,因为我遇到了错误。

DataOzono <- read.table(text="pressure    height  Temperature RH  Ozone   file    LogP
753.6   2541    16.8    76  0   80131   0.3475673
748.0   2604    17.7    32  0   80131   0.347959
743.5   2656    15.9    38  0   80131   0.3482766
739.8   2697    15.4    39  0   80131   0.3485396
736.6   2734    15.0    41  0   80131   0.3487685
731.8   2790    14.5    42  0   80131   0.3491142", header=TRUE, stringsAsFactors=FALSE)

original_par <- par()
par(mar=c(5.1, 8.1, 4.1, 3.1))

for (i in unique(DataOzono$file)){
DataOzono_subset <- DataOzono[DataOzono$file==i,] #keep only rows for that file number

plot(DataOzono_subset$LogP, DataOzono_subset$Temperature, axes= F,type="l",col="red", ylab = "", xlab = 'LogP',xaxt="n",yaxt="n" )
axis(2,col="red",col.axis="red")
mtext(text = 'T',line = 2,side = 2,col="red",col.lab="red")
par(new=TRUE)
plot(DataOzono_subset$LogP, DataOzono_subset$RH,type="l",col="blue",xaxt="n",yaxt="n",xlab="",ylab="")
axis(4,col="blue",col.axis="blue")
mtext("RH",side=4,line=2,col="blue",col.lab="blue" )
par(new=TRUE)
plot(DataOzono_subset$LogP, DataOzono_subset$Ozone,type="l",col="darkgreen",xaxt="n",yaxt="n",xlab="",ylab="")
mtext("O3",side=2,line=6,,col="darkgreen",col.lab="darkgreen")
axis(2, line = 4,col="darkgreen",col.axis="darkgreen")

savePlot(filename=paste0("c:/temp/",i,".png"),type="png")
}

par()  <- original_par #restore par to initial value.

【讨论】:

  • 非常感谢,这解决了我所有的问题,只有一个问题我得到了这个错误“savePlot 错误(filename = paste0("c:/temp/", i, ".png"), type = "png") : 只能从 'windows' 设备复制" 这可能与我的工作目录不在 :C 而是在一个分区 :E 有关?
  • 尝试将路径 ("c:/temp/") 更改为计算机上已存在的目录。还要确保程序可以写入此文件夹。通常 c:/temp 是一个安全的选择,这就是我选择这条路的原因。此外,如果 savePlot 不起作用,请参阅“?png”中的示例。为此,您需要将 png 行放在绘图之前,并将 dev.off() 放在循环中的绘图之后。
  • 我不明白为什么 savePlot 不起作用,我改用 png 函数。
猜你喜欢
  • 1970-01-01
  • 2014-11-21
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多