Как исправить ошибку R: дискретное значение передается в непрерывную шкалу


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

Error: Discrete value supplied to continuous scale

Эта ошибка возникает, когда вы пытаетесь применить непрерывную шкалу к оси в ggplot2, но переменная на этой оси не является числовой.

В этом руководстве рассказывается, как именно исправить эту ошибку.

Как воспроизвести ошибку

Предположим, у нас есть следующий фрейм данных в R:

#create data frame
df = data.frame(x = 1:12,
 y = rep(c('1', '2', '3', '4'), times= 3 ))

#view data frame
df

 x y
1 1 1
2 2 2
3 3 3
4 4 4
5 5 1
6 6 2
7 7 3
8 8 4
9 9 1
10 10 2
11 11 3
12 12 4

Теперь предположим, что мы пытаемся создать диаграмму рассеяния с пользовательским масштабом по оси Y, используя аргумент scale_y_continuous() :

library (ggplot2)

#attempt to create scatterplot with custom y-axis scale
ggplot(df, aes (x, y)) +
 geom_point() +
 scale_y_continuous(limits = c(0, 10))

Error: Discrete value supplied to continuous scale

Мы получаем ошибку, потому что наша переменная оси Y является символом, а не числовой переменной.

Мы можем подтвердить это, используя функцию class( ):

#check class of y variable
class(df$y)

[1] "character"

Как исправить ошибку

Самый простой способ исправить эту ошибку — преобразовать переменную оси Y в числовую переменную перед созданием диаграммы рассеяния:

library (ggplot2) 

#convert y variable to numeric
df$y <- as.numeric(df$y)

#create scatterplot with custom y-axis scale
ggplot(df, aes (x, y)) +
 geom_point() +
 scale_y_continuous(limits = c(0, 10))

Обратите внимание, что мы не получили никакой ошибки, потому что мы использовали scale_y_continuous() с числовой переменной вместо символьной.

Вы можете найти полную онлайн-документацию для функции scale_y_continuous() здесь .

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

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

Как установить разрывы осей в ggplot2
Как удалить метки осей в ggplot2
Как повернуть метки осей в ggplot2