Как исправить в R: plot.new еще не вызывался


Одна ошибка, с которой вы можете столкнуться при использовании R:

Error in plot.xy(xy.coords(x, y), type = type, ...) : 
 plot.new has not been called yet

Эта ошибка возникает, когда вы пытаетесь выполнить какое-либо действие, для которого требуется, чтобы график уже существовал в R, но график не существует.

В следующих примерах показано, как исправить эту ошибку на практике.

Пример 1: Как исправить ошибку с помощью lines()

Предположим, мы пытаемся построить подогнанную линию регрессии в R:

#create data
df <- data.frame(x=c(1, 2, 2, 3, 5, 6, 8, 8, 9, 9, 10, 11, 12, 15, 15),
 y=c(2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 9, 10, 16, 19, 28))

#fit polynomial regression model
model <- lm(y~poly(x, 2), data=df)

#define new sequence of x-values
new_x <- seq(min(df$x), max(df$y))

#attempt to plot fitted regression line
lines(new_x, predict(model, newdata = data.frame(x=new_x))) 

Error in plot.xy(xy.coords(x, y), type = type, ...) : 
 plot.new has not been called yet

Мы получаем ошибку, потому что мы не можем использовать функцию lines() без предварительного создания графика в R.

Чтобы исправить эту ошибку, мы можем сначала создать диаграмму рассеяния, а затем использовать функцию lines() :

#create data
df <- data.frame(x=c(1, 2, 2, 3, 5, 6, 8, 8, 9, 9, 10, 11, 12, 15, 15),
 y=c(2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 9, 10, 16, 19, 28))

#fit polynomial regression model
model <- lm(y~poly(x, 2), data=df)

#define new sequence of x-values
new_x <- seq(min(df$x), max(df$y))

#create scatterplot of x vs. y values
plot(y~x, data=df)

#attempt to plot fitted regression line
lines(new_x, predict(model, newdata = data.frame(x=new_x))) 

Обратите внимание, что мы не получаем ошибку, потому что мы сначала использовали функцию plot() перед использованием функции lines() .

Пример 2: Как исправить ошибку с помощью abline()

Предположим, мы пытаемся создать диаграмму рассеяния с прямой горизонтальной линией в R:

#create data
df <- data.frame(x=c(1, 2, 2, 3, 5, 6, 8, 8, 9, 9, 10, 11, 12, 15, 15),
 y=c(2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 9, 10, 16, 19, 28))

#attempt to add horizontal line at y=10
abline(a=10, b=0, lwd=2)

Error in plot.xy(xy.coords(x, y), type = type, ...) :
 plot.new has not been called yet

Мы получаем ошибку, потому что мы не можем использовать функцию abline() без предварительного создания графика в R.

Чтобы исправить эту ошибку, мы можем сначала создать диаграмму рассеяния, а затем использовать функцию abline() :

#create data
df <- data.frame(x=c(1, 2, 2, 3, 5, 6, 8, 8, 9, 9, 10, 11, 12, 15, 15),
 y=c(2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 9, 10, 16, 19, 28))

#create scatterplot of x vs. y
plot(y~x, data=df)

#add horizontal line at y=10
abline(a=10, b=0, lwd=2)

Обратите внимание, что мы не получаем ошибку, потому что сначала использовали функцию plot() , а затем функцию abline() .

Связанный: Как использовать abline() в R для добавления прямых линий на графики

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:

Как исправить в R: непредвиденная строковая константа
Как исправить в R: неверная формула модели в ExtractVars
Как исправить в R: аргумент не является числовым или логическим: возвращается na