Як виправити помилку 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

    xy
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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *