我有一个R脚本,用于绘制文件中的数据。该脚本当前使用ylim的硬编码值。我想根据绘制的数据动态确定ylim的正确(即敏感)值。
我使用xlim
限制x轴值。我原本认为绘图函数将能够计算y值(基于xlim
选择的x轴值) - 但是我不必提供ylim参数,但是,当我调用plot()时,xlim
但没有ylim
参数,我收到以下错误:
Error in plot.window(...) : need finite 'ylim' values
Calls: plot -> plot.default -> localWindow -> plot.window
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
所以我的问题是,如果我已经为ylim
指定了限制,我该如何动态确定要为xlim
指定的值?理想情况下,我想指定ylim
限制如下:
ylim_lower <- (y value for xlim_lower) - [some fixed % distance]
ylim_upper <- (y value for xlim_upper) + [some fixed % distance]
我该怎么做?
[[编辑]]
dat <- read.csv(somefile)
n <- dim(dat)[1]
yvals1 <- rep(0,n)
yvals2 <- rep(0,n)
for(i in 1:n){
yvals1[i] <- foobar1(dat$X[i])
yvals2[i] <- foobar2(dat$X[i])
}
# Note: yvals1 and yvals2 MAY contain NAs
# below is the plot command that barfs:
plot(dat$X, yvals1, typ="l", col="green", xlim=c(lowest_val_cuttoff, highest_val_cuttoff), ylim= c(.2, .60), main=c(the_title, "Title goes here"), xlab="x axis label", ylab="y axis label")
lines(dat$X, yvals2, col="red")
答案 0 :(得分:1)
在绘图之前,尝试将数据集(或至少调用以查找绘图范围)限制为有限和无缺失值。
> plot(1:2,1:2, ylim=c(NA,3))
Error in plot.window(...) : need finite 'ylim' values
> plot(1:2,1:2, ylim=c(-Inf,3))
Error in plot.window(...) : need finite 'ylim' values
?is.na
?is.finite
> min(c(NA,3,5))
[1] NA
> min(c(NA,3,5),na.rm=TRUE)
[1] 3
> min(c(-Inf,3,5),na.rm=TRUE)
[1] -Inf
>
> y <- c(-Inf,NA,3,4,5)
> range(y)
[1] NA NA
> range(y, na.rm=TRUE)
[1] -Inf 5
> range(y[!is.na(y) & is.finite(y)])
[1] 3 5
>