2015-03-26 7 views
19

To jest head z mojej ramki danych, którą chciałabym wydrukować.Wykreślanie za pomocą ggplot2: Błąd: wartość dyskretna dostarczana do stałej skali

> dput(head(df)) 
structure(list(`10` = c(0, 0, 0, 0, 0, 0), `33.95` = c(0, 0, 
0, 0, 0, 0), `58.66` = c(0, 0, 0, 0, 0, 0), `84.42` = c(0, 0, 
0, 0, 0, 0), `110.21` = c(0, 0, 0, 0, 0, 0), `134.16` = c(0, 
0, 0, 0, 0, 0), `164.69` = c(0, 0, 0, 0, 0, 0), `199.1` = c(0, 
0, 0, 0, 0, 0), `234.35` = c(0, 0, 0, 0, 0, 0), `257.19` = c(0, 
0, 0, 0, 0, 0), `361.84` = c(0, 0, 0, 0, 0, 0), `432.74` = c(0, 
0, 0, 0, 0, 0), `506.34` = c(1, 0, 0, 0, 0, 0), `581.46` = c(0, 
0, 0, 0, 0, 0), `651.71` = c(0, 0, 0, 0, 0, 0), `732.59` = c(0, 
0, 0, 0, 0, 1), `817.56` = c(0, 0, 0, 1, 0, 0), `896.24` = c(0, 
0, 0, 0, 0, 0), `971.77` = c(0, 1, 1, 1, 0, 1), `1038.91` = c(0, 
0, 0, 0, 0, 0), MW = c(3.9, 6.4, 7.4, 8.1, 9, 9.4)), .Names = c("10", 
"33.95", "58.66", "84.42", "110.21", "134.16", "164.69", "199.1", 
"234.35", "257.19", "361.84", "432.74", "506.34", "581.46", "651.71", 
"732.59", "817.56", "896.24", "971.77", "1038.91", "MW"), row.names = c("Merc", 
"Peug", "Fera", "Fiat", "Opel", "Volv" 
), class = "data.frame") 

To kod, który używam do kreślenia:

## Plotting 
meltDF = melt(df, id.vars = 'MW') 
ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y = variable)) + 
    scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) + 
    scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) 

I jako ostatni błąd, który pojawia się:

Error: Discrete value supplied to continuous scale

Czy masz jakiś pomysł co jest nie tak z tym kodem? Działa dobrze, dopóki nie spróbuję zmienić skali, wierzę, że błąd jest gdzieś tam ...

Próbowałem dowiedzieć się, czy ktoś ma podobny problem, ponieważ jest już kilka takich tematów, ale wygląda na to, inne problemy zostały wymienione.

To jak wykreślić wyglądać przed dodaniem skali:

Plot

+4

Twoje wartości y (zmienne) są współczynnikami, więc nie możesz użyć 'scale_y_continuous'. –

+1

Jakieś szybkie rozwiązanie, jak zmienić je na numeryczne lub wymagane? Dzięki! – Rechlay

+1

http://stackoverflow.com/questions/3418128/how-to-convert-a-actor-to-an-integer-numeric- without-a-loss-of-information – Pewi

Odpowiedz

24

Jak wspomniano w komentarzach, nie może być ciągła skala na zmienną typu factor. Można zmienić factor na numeric w następujący sposób, zaraz po zdefiniowaniu zmiennej meltDF.

meltDF$variable=as.numeric(levels(meltDF$variable))[meltDF$variable] 

Następnie wykonać komendę ggplot

ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y = variable)) + 
    scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) + 
    scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) 

I będzie mieć swój wykres.

Nadzieja to pomaga

-2

jeśli x jest numeryczny, a następnie dodać scale_x_continuous(); jeśli x jest znakiem/czynnikiem, to dodaj scale_x_discrete(). To może rozwiązać twój problem.

Powiązane problemy