使用NADA库中的plot(cenros)命令在同一图表上显示多个概率图

时间:2012-08-08 18:05:55

标签: r graph plot par

我目前正在对采用低影响开发实践的城市雨水管理设施进行性能分析。

我在特定雨水管理实践的流入和流出位置具有几种水质成分(例如:总磷(TP),总氧化氮(OxN)等)的事件平均浓度(EMC)。

我希望使用污水概率方法创建一个正态概率图,比较流入和流出事件平均浓度(EMC)的对数变换(最常见)数据,作为在视觉上比较水质成分EMC的方法。所有风暴事件的流入和流出位置。

由于环境水质数据的审查性质,我采用概率图函数,该函数使用有序统计(ROS)方法的稳健回归来确定未经审查的数据在概率图中的位置。在确定概率图中未经审查数据的位置时,这种强大的ROS方法考虑了被删失或低于报告限制的数据的比例。

plot(cenros(Observation, ObservationCensored)) 

命令为数据创建一个删失的对数正态ROS概率图。其中

 Observation=the raw data 
 ObservationCensored=TRUE/FALSE

TRUE=a censored observation
FALSE=an uncensored observation

我已经在此消息的末尾包含了我在R中使用的数据和命令。如果需要,可以将它们直接粘贴到R中以查看结果(只要您安装了 NADA 包)。

如果您已将以下输入复制到R中,那么您将看到两个删除的对数正态ROS概率图重叠在一个图表上。但是,您还会注意到轴的x和y标度没有正确排列。以下列表描述了我如何尝试将x和y限制设置为两个概率图的相同比例:

  • 我尝试在每个xlim=c()命令中分别使用ylim=c()plot()设置x和y限制但是因为'形式参数“xlim”和“ylim”匹配而发生错误通过多个实际参数'。
  • 我还尝试在第二个plot()命令中设置第二个绘图的轴= FALSE,但它似乎没有效果。
  • 我尝试在usr=c(x1,x2,y1,y2)命令中设置par(),再次没有效果。
  • 我尝试在xaxs= “d”命令中设置par()但是“D”在R中未实现,因此发生了错误。 yaxs=”d”
  • 也是如此
  • 我尝试在第二个图表中设置xaxt= “n”以禁止绘制轴,但这只会抑制打印底部x轴的值,因此无法满足我的需要。
  • 长话短说,我无法在同一个图上绘制两个概率图(具有匹配的x轴和y轴)。

通过在两个概率图中设置xlim和ylim修饰符和/或在par(new=TRUE)命令中使用修饰符,我将非常感谢如何使x轴和y轴相同。


以下是我用于创建覆盖在单个图表上的两个删失对数正态ROS概率图的数据和命令,以用于污水概率方法。如果需要,可以将它们直接粘贴到R中以查看结果(只要您安装了NADA包)。

library(NADA)
CUIN.TP.EMC<-c(0.09,1.22748027,0.0414537,0.11796508,1.3,0.06,0.06,0.17495668,0.08997043,0.11922784,0.14,0.4,0.77,0.04573882,0.15,0.00531218,0.27376485,0.06,0.30250796,0.64581398,0.48,0.27,0.67655024,0.1,0.21)
CUIN.TP.EMC.IV<-c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE)

CUOUT.TP.EMC<-c(0.28,0.24,0.31,0.26,0.19,0.28,0.35,0.23,0.2,0.24,0.17,0.46,0.35)
CUOUT.TP.EMC.IV<-c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE)

plot(cenros(CUIN.TP.EMC,CUIN.TP.EMC.IV))
par(new=TRUE)
plot(cenros(CUOUT.TP.EMC,CUOUT.TP.EMC.IV))

1 个答案:

答案 0 :(得分:0)

我认为“ros”类对象的绘图方法没有充分记录。 ylim和xlim都设置为参数的范围,这是以阻止用户提供备用范围的方式完成的。您需要重新编写绘图方法才能更改此方法。 NADA中的情节方法帮助页面没有记录这一事实。

如果你想模仿用于设置xlim和ylin参数的方法,你需要看看plot.ros函数是如何做到的,然后推广到两个模型拟合:

    uncen = x$modeled[!x$censored]
    cen = x$modeled[x$censored]
    pp.uncen.nq = qnorm(x$pp[!x$censored])
    pp.cen.nq = qnorm(x$pp[x$censored])
     ymin = min(c(uncen, cen))
     ymax = max(c(uncen, cen))
     xmin = min(c(pp.uncen.nq, pp.cen.nq))
     xmax = max(c(pp.uncen.nq, pp.cen.nq))

因此,您需要保存模型拟合,然后提取modeled和'pp'参数并对其进行处理,直到您可以将某些内容传递给修改后的绘图方法。在我对S4调用方法没有成功之后,我已经决定构建一个可以通过此调用看到的plot-method的外化版本会更容易:

showMethods("plot", class="ros", includeDefs=TRUE)