Como corrigir erro r: valor discreto fornecido em escala contínua


Um erro que você pode encontrar no R é:

 Error: Discrete value supplied to continuous scale

Este erro ocorre quando você tenta aplicar uma escala contínua a um eixo no ggplot2, quando a variável nesse eixo não é numérica.

Este tutorial explica exatamente como corrigir esse erro.

Como reproduzir o erro

Suponha que temos o seguinte quadro de dados em 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

Agora suponha que tentamos criar um gráfico de dispersão com uma escala personalizada do eixo y usando o argumento 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

Estamos recebendo um erro porque nossa variável do eixo Y é um caractere em vez de uma variável numérica.

Podemos confirmar isso usando a função class( ):

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

[1] “character”

Como corrigir o erro

A maneira mais fácil de corrigir esse erro é converter a variável do eixo Y em uma variável numérica antes de criar o gráfico de dispersão:

 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))

Observe que não estamos recebendo nenhum erro porque usamos scale_y_continuous() com uma variável numérica em vez de uma variável de caractere.

Você pode encontrar a documentação online completa para a função scale_y_continuous() aqui .

Recursos adicionais

Os tutoriais a seguir explicam como executar outras funções de plotagem comuns no ggplot2:

Como definir quebras de eixo no ggplot2
Como remover rótulos de eixo no ggplot2
Como girar rótulos de eixo no ggplot2

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *